首先。單獨使用ControllerAdvice 無法正常工作。需要配合@EnableWebMvc 使用。
@ControllerAdvice
@EnableWebMvc
pulbic class ExceptionControllerAdvice{
@ExceptionHandler(NotFoundException.class)
@ResponseBody
public Map<String,Object> notFoundExc(NotFoundException exc,HttpServletRequest req){
.......
}
}
在啟動之異常處理報錯。
錯誤信息:
七月 04, 2016 11:00:11 上午 org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver doResolveHandlerMethodException
嚴重: Failed to invoke @ExceptionHandler method: public java.util.Map<java.lang.String, java.lang.Object> com.dooioo.modelException.ExceptionControllerAdvice.notFoundError(com.dooioo.modelException.NotFoundException,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:134)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:101)
at...........(省略。。。。)
xx-servlet.xml中已經配置了messageconverter處理器了。
<bean id="dyMessageConverter" class="com.dooioo.web.converter.DyMappingJacksonHttpMessageConverter"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<!-- spring綁定時處理函數 -->
<property name="webBindingInitializer">
<bean class="com.dooioo.init.DefaultBindingInitializer"/>
</property>
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
<ref bean="dyMessageConverter"/>
</list>
</property>
<property name="requireSession" value="false"/>
<property name="order" value="0"/>
</bean>
上網翻了一遍資料 沒有結果。
最后發現和在xml中的順序有關系。<mvc:annotation-driven/>。
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter 適配器必須聲明在<mvc:annotation-driven />之前,否則不能正常處理參數類型的轉換
到此問題解決。