powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Jackson converter problem
9 сообщений из 9, страница 1 из 1
Jackson converter problem
    #39194856
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет. Выскакивает ошибка:
Код: java
1.
org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class ru.MyResponse] and content type [application/json;charset=UTF-8]


Делаю так:
Код: java
1.
2.
3.
4.
5.
        
MyRequest request = new MyRequest();
        request.setRequesterId(8);
        MyResponse response = Utils.template().postForObject("url"), request, MyResponse.class);
        response.getResults();


Класс MyResponse:
Код: java
1.
2.
MyResponse{
    private Map<Count, List<SomeClass>> results;


Utils класс:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class Utils {
    public static RestTemplate template() {
        RestTemplate template = new RestTemplate();
        List<HttpMessageConverter<?>> converters = new ArrayList<>();
        converters.add(new MappingJackson2HttpMessageConverter());
        converters.add(new StringHttpMessageConverter());
        template.setMessageConverters(converters);
        template.setRequestFactory(new SimpleClientHttpRequestFactory());
        return template;
    }
}


Все запросы отрабатываются корректно, но именно этот, у которого response с мапой, не хочет
Подскажите что не так? Спасибо!
...
Рейтинг: 0 / 0
Jackson converter problem
    #39194917
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашлась проблема, но не понятно как ее решить:
Вывод json ответа:
Код: java
1.
"results":{"ru.Count@6e2fd549":[


Ключ Count:
Код: java
1.
2.
3.
4.
5.
6.
public class Count{
   private int count;
   private String name;
   ......
   get/set
}


Из мапы:
Код: java
1.
Map<Count, List<SomeClass>> results;


почему-то не в json формате: ru.Count@6e2fd549
...
Рейтинг: 0 / 0
Jackson converter problem
    #39194924
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT, toString()?
...
Рейтинг: 0 / 0
Jackson converter problem
    #39194929
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skywriterJulT, toString()?
это да, но что будет когда весь json в стринговом(включая toString) представлении будет демаршализироваться обратно в модель?
а вот сейчас и попробую)
...
Рейтинг: 0 / 0
Jackson converter problem
    #39194933
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT, возможно, придётся фтыкать в ObjectMapper .
...
Рейтинг: 0 / 0
Jackson converter problem
    #39194935
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skywriterJulT, возможно, придётся фтыкать в ObjectMapper .
так и делаю:
Код: java
1.
2.
3.
4.
@Override
        public String toString() {
                return mapper.writeValueAsString(this);
        }


но пока безуспешно:
Код: java
1.
com.fasterxml.jackson.databind.JsonMappingException: Can not find a (Map) Key deserializer
...
Рейтинг: 0 / 0
Jackson converter problem
    #39194940
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот интересно:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
public class TestJson {
    static ObjectMapper mapper = new ObjectMapper();

    public static void main(String[] args) {
        try{
        Map<User, String> map = new HashMap();
        map.put(new User("bla", 1L), "ssss");
        map.put(new User("zzz", 2L), "rrrr");

        Staff staff = new Staff();
        staff.setMyMap(map);

        String jsonString = mapper.writeValueAsString(staff);

        System.out.println("jsonString: " + jsonString);

        Staff obj = mapper.readValue(jsonString, Staff.class);

        System.out.println("Staff: " + obj.getMyMap());

        System.out.println("toObject:" + mapper.writeValueAsString(obj));

        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    static class Staff {
        private Map<User, String> myMap;

        public Staff() {
        }

        public Map<User, String> getMyMap() {
            return myMap;
        }

        public void setMyMap(Map<User, String> myMap) {
            this.myMap = myMap;
        }
    }

    static class User {
        private long id;
        private String name;

        public User(){

        }

        public User(String name, long id) {
            this.name = name;
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public long getId() {
            return id;
        }

        public void setId(long id) {
            this.id = id;
        }

        @Override
        public String toString() {
            try {
                return mapper.writeValueAsString(this);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            return "error";
        }
    }
}


Код: java
1.
2.
jsonString: {"myMap":{"{\"id\":2,\"name\":\"zzz\"}":"rrrr","{\"id\":1,\"name\":\"bla\"}":"ssss"}}
com.fasterxml.jackson.databind.JsonMappingException: Can not find a (Map) Key deserializer for type [simple type, class ru.test.TestJson$User]


А вот если в User убираю id, т.е.:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
static class User {
        private String name;
        public User(){
        }
        public User(String name) {
            this.name = name;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        @Override
        public String toString() {
            try {
                return mapper.writeValueAsString(this);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            return "error";
        }
    }


Выдает:
Код: java
1.
2.
3.
jsonString: {"myMap":{"{\"name\":\"bla\"}":"ssss","{\"name\":\"zzz\"}":"rrrr"}}
Staff: {{"name":"{\"name\":\"bla\"}"}=ssss, {"name":"{\"name\":\"zzz\"}"}=rrrr}
toObject:{"myMap":{"{\"name\":\"{\\\"name\\\":\\\"bla\\\"}\"}":"ssss","{\"name\":\"{\\\"name\\\":\\\"zzz\\\"}\"}":"rrrr"}}


магия
...
Рейтинг: 0 / 0
Jackson converter problem
    #39194949
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT, видимо, придётся зарегистрировать свой deserializer .
...
Рейтинг: 0 / 0
Jackson converter problem
    #39194958
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skywriterJulT, видимо, придётся зарегистрировать свой deserializer .
спасибо, попробую когда время будет, а пока сделала через List
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Jackson converter problem
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]