Spring MVC捕获Http错误(400,404等)

3
下午好。几天来一直在为这个问题苦苦挣扎。我想使用Spring beans(解析器)来捕获应用程序中的所有错误。捕获异常几乎是立即完成的,但是捕获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>
2个回答

3

我在 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";
}

I've got a question about the same thing here


这个问题已经出现了解决方案。但是Spring确实没有标准解决方案吗? - user1573576

0

一种方法是使用 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
事实上,您不想使用控制器。 - user1573576
这适用于处理异常,但问题是关于处理HTTP错误。 - John Mikic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接