Может ли обработчик исключений Spring MVC ТОЛЬКО поддерживать возвращаемый тип типа View? - PullRequest
2 голосов
/ 07 апреля 2011
@RequestMapping(value = "/testerror", method = RequestMethod.GET)
        public
        @ResponseBody
        ErrorTO testerror(HttpServletRequest request, HttpServletResponse response) {
           throw new RuntimeException("erorrrrrr");
        }

        @ExceptionHandler(RuntimeException.class)
        public @ResponseBody ErrorTO handlePoprocksExceptionAsReponseBody(RuntimeException ex,
               HttpServletRequest request, HttpServletResponse response) {
            response.setStatus(response.SC_BAD_REQUEST);
            return new ErrorTO(ex.getMessage(), -999);
        }

Приведенный выше код не работает. StackTrace выглядело так:

org.springframework.web.util.NestedServletException: Ошибка обработки запроса; вложенными исключение java.lang.RuntimeException: erorrrrrr в org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:656) в org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:549) на javax.servlet.http.HttpServlet.service (HttpServlet.java:734) на javax.servlet.http.HttpServlet.service (HttpServlet.java:847)

Я смотрел на Проблемы реализации обработчика исключений контроллера Spring 3 , и, исходя из этого, кажется, что обработчики исключений могут возвращать только представления. Это правда?

Ответы [ 2 ]

1 голос
/ 16 апреля 2011

Вы должны сообщить Spring, как преобразовать возвращаемый объект с помощью обработчика исключений, чтобы он мог писать в ответ HTTP.Допустим, «ErrorTO» является объектом JAXB, а затем возвращается тип содержимого application / xml. Вам следует создать HandlerExceptionResolver в контексте приложения и настроить конвертер сообщений, поддерживающий тип содержимого application / xml (например, org.springframework.http.converter.xml..MarshallingHttpMessageConverter).Вот пример:

  <bean id="outboundExceptionAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver">
    <property name="messageConverters">
      <util:list>
        <ref bean="marshallingHttpMessageConverter"/>
      </util:list>
    </property>
  </bean>

  <bean id="marshallingHttpMessageConverter" class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
    <property name="marshaller" ref="jaxb2Marshaller" />
    <property name="unmarshaller" ref="jaxb2Marshaller" />
  </bean>

  <bean id="jaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="contextPath" value="com.acme" />
  </bean>
0 голосов
/ 10 июня 2011

оказывается ошибкой и считается исправленным в 3.1.

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