@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方式處理異常,全局異常不會生效。