【问题标题】:Available options in Spring MVC to customise the 405 error response?Spring MVC 中用于自定义 405 错误响应的可用选项?
【发布时间】:2018-08-09 14:56:17
【问题描述】:

请指导我。

陷入与 Spring MVC 相关的 2 个问题 -

  1. 在我的项目中,每当发生异常时,整个堆栈跟踪都会打印在响应中。像这样 -

{ “原因”:空, “堆栈跟踪”: [ { "methodName": "resolveHandlerMethod", "fileName": "AnnotationMethodHandlerAdapter.java", “行号”:123, "className": "org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodResolver", “本机方法”:假 }, ...

我尝试通过查看各种建议(例如 @ControllerAdvice 和 @Order(0),甚至在 web.xml 中)来消除此问题 -

<error-page>
    <location>/error/GeneralError</location>
</error-page>

因此,我能够利用 NPE 等控制器抛出的异常,但与 HTTP URL 相关的异常(我相信发生在控制器映射之前)我无法捕捉到。

就像在我的场景中一样,如果用户在 REST 客户端中输入 POST 请求而不是适用的 GET URL,尽管日志中报告的错误是这样的 -

Aug 09, 2018 7:05:00 PM org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver handleHttpRequestMethodNotSupported
WARNING: Request method 'POST' not supported

仍然是 web.xml 中的 @ControllerAdvice 或错误映射,无法在此处和此处捕获 405 错误,因为我没有机会添加我的自定义消息。

对我有什么建议吗?

  1. 其次我尝试扩展

org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver

,并将它与 web.xml 中的 bean 定义一起使用,带有 @Controller 和 @ExceptionHandler 注释,Spring 框架仍然只是简单地忽略了我的努力,并再次使用默认的。

我们不能修改这种行为吗?

【问题讨论】:

    标签: java spring spring-mvc model-view-controller


    【解决方案1】:

    你可以这样做来扩展DispatcherServlet

    试试这个:

    public class GlobalRequestHandler extends DispatcherServlet{
    
        @Override
        protected void service(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
            String path = request.getServletPath();
            //handle here as per your requirement.
            super.service(request, response);
        }
    }
    

    在配置类中添加这个bean:

    @Bean
    DispatcherServlet dispatcherServlet() {
        return new GlobalRequestHandler();
    }
    

    【讨论】:

    • 感谢分享,但我希望 DefaultHandlerExceptionResolver 的行为能够处理异常或错误的情况。抱歉,我可能听起来很菜鸟,但 DispatcherServlet 不是也会影响我的积极情景吗?
    猜你喜欢
    • 2014-12-01
    • 2012-02-21
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 2011-12-29
    • 2014-12-01
    • 2020-10-20
    • 2015-09-04
    相关资源
    最近更新 更多