以下为常用全局异常捕获类,主要用于参数校验
@RestControllerAdvice
public class GlobalExceptionHandler {
private final Logger logger = LoggerFactory.getLogger(getClass());
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public String systemError(Exception e) {
logger.error(e.getMessage(), e);
return "系统错误";
}
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.OK)
public String illegalParamsExceptionHandler(MethodArgumentNotValidException e) {
logger.error(e.getMessage(), e);
return validation(e.getBindingResult());
}
@ExceptionHandler(HttpMessageNotReadableException.class)
@ResponseStatus(HttpStatus.OK)
public String illegalStateException(HttpMessageNotReadableException e) {
logger.error(e.getMessage(), e);
return "参数错误";
}
@ExceptionHandler(BindException.class)
@ResponseStatus(HttpStatus.OK)
public String illegalStateException(BindException e) {
logger.error(e.getMessage(), e);
return validation(e.getBindingResult());
}
private String validation(BindingResult bindingResult) {
List<ObjectError> errors = bindingResult.getAllErrors();
StringBuilder sb = new StringBuilder("");
if (!CollectionUtils.isEmpty(errors)) {
for (ObjectError error : errors) {
FieldError fieldError = (FieldError) error;
sb.append(fieldError.getField() + fieldError.getDefaultMessage() + ",");
}
}
return sb.length()>0?sb.substring(0,sb.length()-1):sb.toString();
}
}