Java SpringMVC捕获http错误(400.404,…)

Java SpringMVC捕获http错误(400.404,…),java,exception,spring-mvc,Java,Exception,Spring Mvc,下午好。为这个问题挣扎了好几天。我想帮助Springbeans(解析器)捕获应用程序中的所有错误。捕获异常几乎是立即发生的,但不处理捕获http错误 问题解决程序的本质是无法拦截http错误 我不想使用web.xml和controller,因为我希望决策仍然使用Spring上下文 捕获例外的实施: <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <

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

问题解决程序的本质是无法拦截http错误

我不想使用web.xml和controller,因为我希望决策仍然使用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>

...

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


404
/404
@请求映射(value=“/404”)
公共字符串handle404(最终HttpServletRequest请求,最终模型){
最终字符串originalUri=(字符串)
getAttribute(“javax.servlet.forward.request_uri”);
//等等。
返回“404”;
}

我有一个关于同样事情的问题

一种方法是使用
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异常处理和显示自定义视图,,

出现此问题的解决方案。但真的没有标准的Spring解决方案吗?事实上,问题是您不想使用控制器。这适用于处理异常,但是,问题是如何处理HTTP错误。
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);
    }
}