Spring MVC:正确的异常处理

时间:2016-07-18 09:42:34

标签: java spring spring-mvc exception-handling

我想知道如何将异常handling method绑定到url mapping方法:

@Controller
public class UserController {

    @Autowired
    UserDao userDao;

    @RequestMapping(value = "/user", method = RequestMethod.GET)
    public String users(@ModelAttribute("model") ModelMap model) {
        model.addAttribute("userList", userDao.getAll());
        String[] b = new String[0];
        String a = b[1];
        return "user";
    }

    @ExceptionHandler(Exception.class)
    public String handleAllException(Exception ex, @ModelAttribute("model") ModelMap model) {
        model.addAttribute("error", "Exception happened");
        return "error_screen";
    }
}

我故意在java.lang.ArrayIndexOutOfBoundsException方法中挑起users。但是我发现没有执行handleAllException方法。

问题: 我忘了做些什么让Exception Handling正常工作?

3 个答案:

答案 0 :(得分:1)

尝试做这样的事情:

 @ExceptionHandler(Exception.class)
 public ModelAndView handleAllException(Exception ex) {
  ModelAndView model = new ModelAndView("error_screen");
  model.addAttribute("error", "Exception happened");
  return model;
 }

答案 1 :(得分:0)

尝试以下

@ExceptionHandler(Exception.class) -> @ExceptionHandler({Exception.class})

答案 2 :(得分:0)

原因是在尝试调用handleAllException()方法时,它因以下异常而失败:

DEBUG [http-nio-8080-exec-6] --- ExceptionHandlerExceptionResolver:无法调用@ExceptionHandler方法:public java.lang.String controllers.handleAllException(java.lang.Exception,org.springframework。 ui.ModelMap) java.lang.IllegalStateException:参数[1]没有合适的解析器[type = org.springframework.ui.ModelMap] HandlerMethod详细信息:

更改方法如下:

@ExceptionHandler(Exception.class)
    public String handleAllException(Exception ex) {
        // model.addAttribute("error", String.format("Exception happened"));
        return "error_screen";
    }