Весна 3 и отдых: исключение, оставленное за кулисами - PullRequest
1 голос
/ 08 июня 2011

У меня есть очень простой веб-сервис Spring 3 ReST, который выглядит следующим образом

@RequestMapping(method = RequestMethod.POST, value = "/user")
public @ResponseBody
UserDTO saveUser(@RequestBody UserDTO userDTO)
{
    // Functionality removed as it is not needed for this example
    return userDTO;
}

Этот веб-сервис прекрасно работает.Однако я заметил странную проблему, когда добавил «всеобъемлющий» @ExceptionHandler.При этом вызове POST, даже если он возвращается правильно, кажется, что где-то за кадром выдается исключение.Поэтому, если я добавлю код:

@ExceptionHandler(Exception.class)
public ModelAndView handleRemainingExceptions(Exception ex)
{
    logger.error("Unhandled exception", ex);
    return new ModelAndView("error");
}

Я вдруг получу эту ошибку:

07.06.2011 22:54:05 ERROR-ImportController: [Unhandled exception]:
Cannot extract parameter (UserDTO userDTO): no Content-Type found]
org.springframework.web.HttpMediaTypeNotSupportedException: Cannot extract parameter (UserDTO userDTO): no Content-Type found
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.readWithMessageConverters(HandlerMethodInvoker.java:620)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveRequestBody(HandlerMethodInvoker.java:597)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:346)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:619)

Кто-нибудь знает, что здесь происходит?

1 Ответ

0 голосов
/ 05 июля 2011

Исключение, по-видимому, заключается в том, что ваш запрос не содержит заголовок Content-Type, и поэтому Spring не знает, какой MessageConverter использовать для создания параметра метода UserDTO.

...