3

下午好。为这个问题苦苦挣扎了好几天。我想帮助 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>
4

2 回答 2

3

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

我在这里有一个关于同一件事的问题

于 2012-08-03T08:45:11.357 回答
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 异常处理和显示自定义视图Part1 , 2 , 3 , 4

于 2012-08-03T08:57:58.210 回答