我正在使用ResponseEntityExceptionHandler全局处理错误,并且几乎可以正常工作,只是我想用spring处理错误的请求。通过任何逻辑,handleNoSuchRequestHandlingMethod都应处理此问题,但是总是要进行处理
HTTP Status 404 - type Status report message description The requested resource is not available. Apache Tomcat/7.0.37
在控制台中启用调试时,我刚刚得到以下信息:
WARN:org.springframework.web.servlet.PageNotFound-找不到带URI的HTTP请求的映射
只是为了通过处理澄清一下,我的意思是我要返回JSON。
知道如何处理吗?
在DispatcherServlet类; 它发送错误响应而无需打扰调用异常处理程序(默认情况下)。
DispatcherServlet
由于4.0.0.RELEASE这种行为可以简单地改变与throwExceptionIfNoHandlerFound参数:
设置在找不到此请求的处理程序时是否引发NoHandlerFoundException。然后可以使用HandlerExceptionResolver或@ExceptionHandler控制器方法捕获此异常。
NoHandlerFoundException
HandlerExceptionResolver
@ExceptionHandler
XML配置:
<servlet> <servlet-name>rest-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>throwExceptionIfNoHandlerFound</param-name> <param-value>true</param-value> </init-param> </servlet>
基于Java的配置:
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { void customizeRegistration(ServletRegistration.Dynamic registration) { registration.setInitParameter("throwExceptionIfNoHandlerFound", "true"); } ... }
然后NoHandlerFoundException可以这样处理:
@ControllerAdvice public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { @Override ResponseEntity handleNoHandlerFoundException(NoHandlerFoundException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { // return whatever you want } }