@RestControllerAdvice
public class ExceptionHandlerController {
@ExceptionHandler
public JsonContent handler(Exception exception) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
HttpServletResponse response = attributes.getResponse();
exception.printStackTrace();
if (exception instanceof BizException) {
return JsonContent.error(((BizException) exception).getCode(), exception);
}
if (exception instanceof PersistenceException) {
return JsonContent.error("数据库操作失败,请联系管理员");
}
if(exception instanceof TokenException){
response.setStatus(401);
return JsonContent.error(exception.getMessage());
}
if (exception instanceof MethodArgumentNotValidException) {
if (((MethodArgumentNotValidException) exception).getBindingResult().getFieldErrors().size() > 0) {
String field = ((MethodArgumentNotValidException) exception).getBindingResult().getFieldErrors().get(0).getField();
String defaultMessage = ((MethodArgumentNotValidException) exception).getBindingResult().getFieldErrors().get(0).getDefaultMessage();
return JsonContent.error(500, new BizException(500, field + defaultMessage));
}
return JsonContent.error(500, exception);
}
if (exception.getCause() instanceof JsonMappingException) {
return JsonContent.error("参数错误,请检查输入的参数");
} else if (exception instanceof MultipartException) {
response.setStatus(500);
if ((((MultipartException) exception).getRootCause()) instanceof FileUploadBase.FileSizeLimitExceededException) {
return JsonContent.error("上传失败:请上传小于300M的文件");
} else {
return JsonContent.error("上传失败,请联系管理员");
}
} else if(exception instanceof TradeException){
return JsonContent.error(((TradeException) exception).getCode(), exception);
} else if(exception instanceof DuplicateKeyException){
String pattStr = "(?<=\').*?(?=\')";
//创建Pattern并进行匹配
Pattern pattern= Pattern.compile(pattStr);
Matcher m=pattern.matcher(exception.getMessage());
String s="";
while(m.find()){
s=m.group();
break;
}
return JsonContent.error("【"+s+"】"+"数据已被占用");
}
String errorMsg = exception.getMessage();
if (UtilsString.isBlank(errorMsg)) {
errorMsg = "系统异常,请联系管理员!";
}
return JsonContent.error(errorMsg);
}
}
如果在项目里还使用了@Around,通过try_catch方式处理异常,全局异常不会生效。