一尘不染

Spring MVC Spring安全性和错误处理

spring

我正在使用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。

知道如何处理吗?


阅读 336

收藏
2020-04-20

共1个答案

一尘不染

DispatcherServlet类; 它发送错误响应而无需打扰调用异常处理程序(默认情况下)。

由于4.0.0.RELEASE这种行为可以简单地改变与throwExceptionIfNoHandlerFound参数:

设置在找不到此请求的处理程序时是否引发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
    }
}
2020-04-20