@ExceptionHandler全域性異常處理--程式碼更精簡易懂
阿新 • • 發佈:2018-11-13
採用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