对springboot项目的异常进行统一处理,
1、自定义异常类
public class UnException extends RuntimeException {
protected int status;
public UnException(ResponseCode responseCode) {
super(responseCode.getMessage());
this.status = responseCode.getStatus();
}
public UnException(int status, String message) {
super(message);
this.status = status;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
}
2、对异常类进行处理
/**
* 统一异常处理
* zhangw
*/
@ControllerAdvice
public class ExceptionAdvice {
/**
* 全局异常捕捉处理
*
* @param ex
* @return
*/
@ResponseBody
@ExceptionHandler(value = Exception.class)
public Map errorHandler(Exception ex) {
Map map = new HashMap();
map.put("status", ExceptionCode.EXCEPTION);
map.put("msg", ex.getMessage());
return map;
}
/**
* 拦截捕捉自定义异常 UException.class
* @param ex
* @return
*/
@ResponseBody
@ExceptionHandler(value = UException.class)
public Map UExceptionHandler(UException ex) {
Map map = new HashMap();
map.put("status", ex.getStatus());
map.put("msg", ex.getMessage());
return map;
}
/**
* 拦截捕捉自定义异常 ConstraintViolationException.class
* @param ex
* @return
*/
@ResponseBody
@ExceptionHandler(value = ConstraintViolationException.class)
public Map ConstraintViolationExceptionHandler(ConstraintViolationException ex) {
Map map = new HashMap();
Set<ConstraintViolation<?>> constraintViolations = ex.getConstraintViolations();
Iterator<ConstraintViolation<?>> iterator = constraintViolations.iterator();
List<String> msgList = new ArrayList<>();
while (iterator.hasNext()) {
ConstraintViolation<?> cvl = iterator.next();
msgList.add(cvl.getMessageTemplate());
}
map.put("status", ExceptionCode.CVL_EXCEPTION);
map.put("msg", msgList);
return map;
}
}
3、controller测试
@GetMapping(value ="test")
public Response test() throws Exception {
throw new UException(100, "内容错误抛出异常");
}