Это сводило меня с ума уже несколько дней.Из того, что я прочитал, я понимаю, что у меня есть два варианта автоматической обработки контента в Spring MVC.Я могу использовать messageConverters, чтобы автоматически определять запрос через @RequestBody и ответ через @ResponseBody, или (но не и!) ... Я могу использовать преобразователи представления для автоматического обнаружения на основе различных других критериев, таких как расширения запроса.
Я пытаюсь использовать @RequestBody и @ResponseBody.Я прочитал несколько постов здесь и в блогах, и я не могу понять, почему это не работает.Мой файл spring-servlet.xml содержит:
<context:annotation-config />
<context:component-scan base-package="au.com.mypackage.service" />
<mvc:annotation-driven />
Мой контроллер выглядит так:
@Controller
public class MyController {
@RequestMapping(value = "/data/{id}", method=RequestMethod.GET)
@ResponseBody public Bean getData(@PathVariable String id) {
Bean bean = new Bean(); // Simple bean not worth listing here.
bean.setSomething("hello");
bean.setSomethingElse(5);
return bean;
}
}
Но журналы
...
2011-07-07 17:23:58,119 DEBUG org.springframework.core.convert.support.GenericConversionService:186 Converted to '123'
2011-07-07 17:23:58,120 DEBUG org.springframework.web.bind.annotation.support.HandlerMethodInvoker:173 Invoking request handler method: public au.com.mypackage.service.MyController$Bean au.com.mypackage.service.MyController.getData(java.lang.String)
...
2011-07-07 17:23:58,143 DEBUG org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver:132 Resolving exception from handler [au.com.mypackage.service.MyController@3d3c4c09]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
...
2011-07-07 17:23:58,144 DEBUG org.springframework.web.servlet.DispatcherServlet:824 Null ModelAndView returned to DispatcherServlet with name 'spring': assuming HandlerAdapter completed request handling
2011-07-07 17:23:58,145 DEBUG org.springframework.web.servlet.FrameworkServlet:674 Successfully completed request
2011-07-07 17:23:58,150 DEBUG org.springframework.web.servlet.DispatcherServlet:693 DispatcherServlet with name 'spring' processing GET request for [/spring/data/123]
...
2011-07-07 17:23:58,154 DEBUG org.springframework.web.bind.annotation.support.HandlerMethodInvoker:173 Invoking request handler method: public au.com.mypackage.service.MyController$Bean au.com.mypackage.service.MyController.getData(java.lang.String)
2011-07-07 17:23:58,175 DEBUG org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker:981 Written [au.com.mypackage.service.MyController$Bean@5b62f030] as "application/json;charset=UTF-8" using [org.springframework.http.converter.json.MappingJacksonHttpMessageConverter@3c870e2f]
2011-07-07 17:23:58,175 DEBUG org.springframework.web.servlet.DispatcherServlet:824 Null ModelAndView returned to DispatcherServlet with name 'smsManager2': assuming HandlerAdapter completed request handling
2011-07-07 17:23:58,175 DEBUG org.springframework.web.servlet.FrameworkServlet:674 Successfully completed request
Как я это читаю:
- Хит контроллера и возвращает бин.
- Выдает HttpMediaTypeNotAcceptableException.
- Хит контроллера и возвращает бин.
- Возвращает его с помощью конвертера сообщений JSON.
Кто-нибудь знает, что не так, я играю с этим несколько дней и не могу заставить его отправить обратно XML.
IЯ проверил MessageConverters в annotationMethodHandlerAdapter и там есть конвертер JaxB.Поэтому я не понимаю, почему он не используется.
Я также установил заголовок Accept в запросе покоя SoapUI на application / xml, и он просто не работает.