异常设计及Spring的异常处理机制

2017-03-15  本文已影响0人  iyiyi

异常不可避免,设计主要考虑以下原则

基于上述分类,java里面的异常设计基本遵循以下两条原则

客户端无能为力 -- 封装成Unchecked
客户端可以调整 -- 封装成Checked

一些好的实践

bad:

public class DuplicateUsernameException extends Exception {}

good:

public class DuplicateUsernameException extends Exception {
    public DuplicateUsernameException (String username){....}
    public String requestedUsername(){...}
    public String[] availableNames(){...}
}

or even:

throw new RuntimeException("Username already taken");

Spring的异常处理

三种选择:以异常为基础;以控制器为基础;全局处理

任何没有被处理的异常会导致HTTP 500错误。

@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No such Order")  // 404
public class OrderNotFoundException extends RuntimeException {
    // ...**Bad practice according above principle**
}

这种异常不需要特殊处理,也不需要在最外层拦截,会直接导致一个指定HTTP状态的返回。

HttpServletRequest, HttpServletResponse, HttpSession and/or Principle都可以出现在handler的参数列表里。

上一篇 下一篇

猜你喜欢

热点阅读