我正在使用 Spring Boot 3.0.2,并且我已经实现了 @ControllerAdvice 来处理异常。 这是我的验证错误代码:
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) {
List<ExceptionDescription> errors = new ArrayList<>();
for (ObjectError err : ex.getBindingResult().getAllErrors()) {
if (err instanceof FieldError) {
FieldError fieldError = (FieldError) err;
errors.add(new ExceptionDescription(getMessageCodes().get(fieldError.getCode()), fieldError.getDefaultMessage(), fieldError.getField(), ex.getStatusCode()));
} else {
errors.add(new ExceptionDescription(err.getDefaultMessage(), field(ex), ex.getStatusCode()));
}
}
return handleExceptionInternal(ex, errors, headers, status, request);
}
我遇到的问题是响应被 BasicErrorController 覆盖,并且我在 json 响应中没有看到 ExceptionDescriptions 数组。
奇怪的是,这在另一个项目中运行良好。
有什么想法吗?
所以,我看到的行为是 ExceptionDescription 类没有公共 getter 方法的结果,并且抛出了一个异常,我花了一些时间才发现。
这解释了异常的原因 - 杰克逊映射异常