Я предполагаю, что ваш метод контроллера использует @ResponseBody и что возвращаемые вами объекты модели отмечены аннотациями Jaxb2 (в частности, @XmlRootElement).
У меня была та же проблема, что и у вас. Проблема в том, что @ResponseBody обходит ContentNegotiatingViewResolver. Вы можете подтвердить это, добавив некоторые точки останова к методам ContentNegotiatingViewResolver, например, «resolViewName», и посмотрите, действительно ли он получил (не будет).
Текущая работа, которую я использую, заключается в том, чтобы фактически объявить представление json и специально использовать его.
Вы должны добавить что-то вроде этого в ваш xml:
<bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>
Затем вы можете изменить свой элемент списка, чтобы он выглядел примерно так:
<beans:ref bean="jsonView" />
Ваш метод контроллера будет возвращать ModelAndView следующим образом:
@RequestMapping(value = "/{username}/get.json", method = RequestMethod.GET)
public ModelAndView getUser(@PathVariable String username) {
User user = service.getUser(username);
return new ModelAndView("jsonView", "user", user);
}
Или вы можете просто вернуть представление в виде строки и добавить объявление ModelMap в сигнатуру вашего метода:
@RequestMapping(value = "/{username}/get.json", method = RequestMethod.GET)
public String getUser(@PathVariable String username, ModelMap model) {
User user = service.getUser(username);
model.addAttribute("user", user);
return "jsonView";
}
Надеюсь, это поможет.
(Примечание: распечатка этого из памяти, так что есть вероятность синтаксических ошибок и т. Д.)
Я не нашел более элегантного решения этой проблемы, но если я это сделаю, я опубликую его здесь.
EDIT:
Попробуйте удалить @ResponseBody. Если вы сделаете это, MessageConverters не будут активированы, и ContentNegotiatingViewResolver будет запущен. На данный момент, это должно быть расширение, которое определяет представление (на основе ваших настроек).
Вам не нужно ничего менять, кроме удаления @ResponseBody, тип возвращаемого значения может остаться прежним.