Spring MVC的捕获HTTP错误(400.404,...)(Spring MVC catch

2019-09-20 17:41发布

下午好。 一连几天挣扎过的问题。 我想帮助的Spring bean(解析器)来捕捉应用程序中的所有错误。 捕获几乎立即作出例外,但与捕捉HTTP错误没有被处理。

问题解析的本质无法拦截HTTP错误。

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

捕获异常的执行情况:

<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>

Answer 1:

我设置映射为40x中的错误web.xml然后处理它们在控制器(延伸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";
}

我有一个同样的事情的问题在这里



Answer 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的异常处理和显示自定义视图第1部分 , 2 , 3 , 4



文章来源: Spring MVC catch http errors (400.404, …)