@ExceptionHandler
所在类没有被Spring管理- AOP
process()
没有讲异常抛出,自然不会被拦截掉 - 如果前面两种都不是恭喜你,跟我一样是第三种 ,在
@RestControllerAdvice
@ConrollerAdivce
所在的类使用@Order(999999)
,注意这里不要引用错误的包了了,org.springframework.core.annotation.Order
@Order(9999)
@RestControllerAdvice(basePackages = {"com.test"})
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class)
public ResultValue<Object> handleRuntimeException(RuntimeException ex) {
String localizedMessage = ex.getLocalizedMessage();
if (StringUtils.isEmpty(localizedMessage)) {
localizedMessage = "系统执行失败!";
}
ResultValue<Object> resultValue = new ResultValue<>();
resultValue.setSuccess(false);
resultValue.setMessage(localizedMessage);
resultValue.setMessageType(MessageTypeEnum.ERROR);
ex.printStackTrace();
return resultValue;
}
@ExceptionHandler({MethodArgumentNotValidException.class, BindException.class})
public ResultValue<Object> argumentValidException( MethodArgumentNotValidException exception) {
ResultValue<Object> resultValue = new ResultValue<>();
resultValue.setSuccess(false);
resultValue.setMessage("参数校验错误");
resultValue.setMessageType(MessageTypeEnum.ERROR);
Map<String, List<String>> argumentNotValidMap = exception.getBindingResult()
.getAllErrors()
.stream()
.map(FieldError.class::cast)
.collect(Collectors.groupingBy(FieldError::getField,
Collectors.mapping(FieldError::getDefaultMessage, Collectors.toList())));
resultValue.setData(argumentNotValidMap);
return resultValue;
}
}