2011-04-06 33 views
2
@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); 
     } 

上述代碼無效。堆棧跟蹤是這樣的:Spring MVC異常處理程序是否可以支持返回類型View?

org.springframework.web.util.NestedServletException: 請求處理失敗;嵌套0​​例外是 了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 controller exception handler implementation problems並且基於此,似乎異常處理程序只能返回視圖。真的嗎?

回答

0

原來是一個錯誤,並說在3.1固定。

1

您必須讓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> 
相關問題