1. 程式人生 > >@ExceptionHandler全域性異常處理--程式碼更精簡易懂

@ExceptionHandler全域性異常處理--程式碼更精簡易懂

採用springmvc框架搭建的專案,為提高web專案程式碼可讀性,複用率。記錄一下關於專案中異常的統一處理。

1、當一個Controller中有方法加了@ExceptionHandler之後,這個Controller其他方法中沒有捕獲的異常就會以引數的形式傳入加了@ExceptionHandler註解的那個方法中。

例如在一個controller中加入以下程式碼我們便可省去繁雜的每個方法中的try{}catch{}:

    @ExceptionHandler
    public ServiceStatus exp(HttpServletResponse response, Exception ex) {
        response.setStatus(500);
        LOG.error("Gloal exception Handler", ex);
        return new ServiceStatus(ServiceStatus.Status.Fail, ex.getMessage());
    }
ServiceStatus實體:
public class ServiceStatus {

    private Status status;
    private String msg;
    private Long id;
    public ServiceStatus(Status status, String msg) {
        this.status = status;
        this.msg = msg;
    }
    public ServiceStatus(Status status, String msg, Long id) {
        this.status = status;
        this.msg = msg;
        this.id = id;
    }
    public enum Status {
        Success(1), Fail(2);
        private int status;
        Status(int status) {
            this.status = status;
        }
        public int getStatus() {
            return status;
        }
        public String toString() {
            return  new Integer(this.status).toString();
        }
    }
    public String getStatus() {
        return status.toString();
    }
    public void setStatus(Status status) {
        this.status = status;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
}

2、我們可以更抽象對整個專案的異常進行統一處理。

@ControllerAdvice + @ExceptionHandler配合使用

可參考部落格:https://blog.csdn.net/kinginblue/article/details/70186586