【问题标题】:Spring MVC catch http errors (400.404, ....)Spring MVC 捕获 http 错误 (400.404, ....)
【发布时间】:2012-08-01 07:06:26
【问题描述】:

下午好。为这个问题苦苦挣扎了好几天。我想帮助 Spring bean(解析器)捕获应用程序中的所有错误。几乎立即捕获异常,但不处理捕获 http 错误。

问题解析器本质无法拦截http错误。

我不想使用web.xml和控制器,因为我希望决定还是使用Spring上下文。

catch异常的实现:

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
        <map>
            ...
            <entry key="java.lang.Throwable" value=".error" />
        </map>
    </property>
    <property name="defaultErrorView" value=".error"/>
</bean>

【问题讨论】:

    标签: java exception spring-mvc


    【解决方案1】:

    我为web.xml 中的40x 错误设置映射,然后在控制器中处理它们(它扩展SimpleMappingExceptionResolver 并处理500 错误)

    <error-page>
        <error-code>404</error-code>
        <location>/404</location>
    </error-page>
    
    @RequestMapping(value = "/404")
    public String handle404(final HttpServletRequest request, final Model model) {
    
         final String originalUri = (String)       
            request.getAttribute("javax.servlet.forward.request_uri");
         // etc.
        return "404";
    }
    

    我有一个关于同一件事的问题here

    【讨论】:

    • 解决了这个问题。但是Spring真的没有标准解决方案吗?
    【解决方案2】:

    一种方法是使用HandlerExceptionResolver接口。

    HandlerExceptionResolver 接口的替代方法是@ExceptionHandler 注释。您可以在控制器中使用@ExceptionHandler 方法注释来指定在控制器方法执行期间抛出特定类型的异常时调用哪个方法。例如:

    package com.spring3;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;
    
    @Controller
    public class HelloWorldController {
    
        @ExceptionHandler(Exception.class)
        public ModelAndView handleMyException(Exception exception) { 
            ModelAndView mv = new ModelAndView("redirect:errorMessage.html?error=" + exception.getMessage());
            return mv; 
        }
    
        @RequestMapping(value = "/errorMessage", method = RequestMethod.GET)
        public ModelAndView handleMyExceptionOnRedirect(@RequestParam("error") String error) {
            ModelAndView mv = new ModelAndView("uncaughtExceptionSpring"); 
            v.addObject("error", error);
            return mv; 
        }
    
        @RequestMapping("/hello")
        public ModelAndView helloWorld() throws Exception {
            String message = "Hello World, Spring 3.0!";
            return new ModelAndView("hello", "message", message);
        }
    }
    

    Spring MVC 异常处理和显示自定义视图Part1234

    【讨论】:

    • 事实上你不想使用控制器。
    • 这适用于处理异常,但是,问题是关于处理 HTTP 错误。
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 2016-06-05
    相关资源
    最近更新 更多