采用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