@ControllerAdvice
@RestController
@Slf4j
public class ControllerExceptionHandler {
/**
* 全局异常处理
*/
@ExceptionHandler(value = Exception.class)
public ResponseEntity<String> validatorExceptionHandler(Exception e) {
if (e instanceof InternalAuthenticationServiceException) {
log.warn("登录认证失败:{}", e.getMessage());
return new ResponseEntity<>(AesEncryptUtils.encryptAES(e.getMessage()),
HttpStatus.UNAUTHORIZED);
} else if (e instanceof MissingServletRequestParameterException) {
log.warn("缺少必填参数:{}", e.getMessage());
return new ResponseEntity<>(AesEncryptUtils.encryptAES("缺少必填参数:" + e.getMessage()),
HttpStatus.BAD_REQUEST);
} else {
log.error("服务异常:{}", e.getMessage(), e);
return new ResponseEntity<>(AesEncryptUtils.encryptAES("服务异常:" + e.getMessage()),
HttpStatus.INTERNAL_SERVER_ERROR);
}
}
/**
* 非法参数验证异常
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<String> handleMethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException ex) {
BindingResult bindingResult = ex.getBindingResult();
List<String> list = new ArrayList<>();
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
for (FieldError fieldError : fieldErrors) {
list.add(fieldError.getField() + ":" + fieldError.getDefaultMessage());
}
Collections.sort(list);
log.error("***入参属性错误:{}***", JSON.toJSONString(list));
String errMsg = AesEncryptUtils.encryptAES(JSON.toJSONString(list));
return new ResponseEntity<>(errMsg, HttpStatus.BAD_REQUEST);
}
}
异常拦截器
最新推荐文章于 2025-03-06 09:50:46 发布
该博客主要展示了如何使用@ControllerAdvice和@RestController注解实现全局异常处理,包括内部认证服务异常、缺失请求参数异常及一般服务异常的捕获和响应。同时,博主详细说明了如何处理MethodArgumentNotValidException,将参数校验错误转化为HTTP 400 Bad Request响应,并提供了详细的错误信息加密处理逻辑。

520

被折叠的 条评论
为什么被折叠?



