В чем отличие коллекций от приведения из HashMap через entryset () и приведения ArrayList для Джексона? - PullRequest
1 голос
/ 24 августа 2011

Я занимаюсь разработкой приложения Spring Rest. Один из моих методов таков:

@RequestMapping(method = RequestMethod.GET)
public @ResponseBody
Collection<Configuration> getConfigurationInJSON() {
    Collection<Configuration> confList = new ArrayList<Configuration>();
...

Я заполняю свой confList и отправляю его для GET-запроса, он работает. Однако, когда я хочу сохранить этот confList в HashMap и отправить его после получения entrySet, вот так:

@RequestMapping(method = RequestMethod.GET)
public
@ResponseBody
Collection<Configuration> getAllConfigurationsInJSON() {
    return configurationMap.values();
}

Это дает мне ошибку 406, значит, есть ошибка. Каковы различия между этими коллекциями и почему вторая отличается от первого примера?

Ответы [ 2 ]

0 голосов
/ 24 августа 2011

Очевидное отличие состоит в том, что configurationMap.values() представляет собой Set.

Вам необходимо проверить, ожидает ли маршаллер JSON возврата List и не может ли маршалировать Set экземплярыпоскольку маршаллер проверит фактический тип возвращаемого значения вместо объявленного типа возвращаемого значения метода, который является Collection.

Кстати, нет ли каких-либо подсказок в журналах по этому поводу?

0 голосов
/ 24 августа 2011

Ради простоты, вы можете просто скопировать коллекцию values()?

new ArrayList<Configuration>(configurationMap.values());

Единственное, что мне приходит в голову, это то, что Spring ожидает изменяемую коллекцию, но не совсем понимаю, почему.Трудно сказать без отладки, попробуйте включить org.springframework.web полное ведение журнала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...