Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Jackson converter problem / 9 сообщений из 9, страница 1 из 1
17.03.2016, 19:52
    #39194856
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jackson converter problem
Всем привет. Выскакивает ошибка:
Код: 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
17.03.2016, 21:50
    #39194917
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jackson converter problem
Нашлась проблема, но не понятно как ее решить:
Вывод 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
17.03.2016, 22:24
    #39194924
skywriter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jackson converter problem
JulT, toString()?
...
Рейтинг: 0 / 0
17.03.2016, 22:42
    #39194929
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jackson converter problem
skywriterJulT, toString()?
это да, но что будет когда весь json в стринговом(включая toString) представлении будет демаршализироваться обратно в модель?
а вот сейчас и попробую)
...
Рейтинг: 0 / 0
17.03.2016, 23:00
    #39194933
skywriter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jackson converter problem
JulT, возможно, придётся фтыкать в ObjectMapper .
...
Рейтинг: 0 / 0
17.03.2016, 23:06
    #39194935
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jackson converter problem
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
17.03.2016, 23:13
    #39194940
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jackson converter problem
Вот интересно:
Код: 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
17.03.2016, 23:42
    #39194949
skywriter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jackson converter problem
JulT, видимо, придётся зарегистрировать свой deserializer .
...
Рейтинг: 0 / 0
18.03.2016, 00:12
    #39194958
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jackson converter problem
skywriterJulT, видимо, придётся зарегистрировать свой deserializer .
спасибо, попробую когда время будет, а пока сделала через List
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Jackson converter problem / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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