在我的情况下,BindingResult 或 FieldErrors 或 GlobalErrors 可以为 null 吗?
Can BindingResult or FieldErrors or GlobalErrors ever be null in my case?
我有一个如下所示的错误处理程序
@ExceptionHandler(value = {MethodArgumentNotValidException.class})
public ResponseEntity<Error> methodArgumentNotValidHandler(final MethodArgumentNotValidException e) {
final List<String> errors = e.getBindingResult().getFieldErrors().stream()
.map(error -> error.getField() + ": " + error.getDefaultMessage())
.collect(Collectors.toList());
e.getBindingResult().getGlobalErrors().stream()
.forEach(error -> errors.add(error.getObjectName() + ": " + error.getDefaultMessage()));
return new ResponseEntity<>(new Error(HttpStatus.UNPROCESSABLE_ENTITY, errors), HttpStatus.UNPROCESSABLE_ENTITY);
}
我想知道 .getFieldErrors 中的 BindingResult 或 FieldErrors 或 getGlobalErrors 中的 GlobalErrors 是否会变成 null,因为那会非常糟糕
不会的。在集成测试中为此写一个失败案例应该可以消除你的疑虑。
为 MethodArgumentNotValidException
调用了异常处理程序。所以,它应该有一些字段错误。
但是为了更简洁的代码,我建议检查 hasFieldErrors()
异常处理程序是否与 MethodArgumentNotValidException
.
一起处理其他异常
要获取错误消息,请在您的控制器中使用此代码:
@Autowired
private MessageSource messageSource;
...
FieldError error = bindingResult.getFieldError("fieldName");
String errorMessage = messageSource.getMessage(error, Locale.getDefault());
我有一个如下所示的错误处理程序
@ExceptionHandler(value = {MethodArgumentNotValidException.class})
public ResponseEntity<Error> methodArgumentNotValidHandler(final MethodArgumentNotValidException e) {
final List<String> errors = e.getBindingResult().getFieldErrors().stream()
.map(error -> error.getField() + ": " + error.getDefaultMessage())
.collect(Collectors.toList());
e.getBindingResult().getGlobalErrors().stream()
.forEach(error -> errors.add(error.getObjectName() + ": " + error.getDefaultMessage()));
return new ResponseEntity<>(new Error(HttpStatus.UNPROCESSABLE_ENTITY, errors), HttpStatus.UNPROCESSABLE_ENTITY);
}
我想知道 .getFieldErrors 中的 BindingResult 或 FieldErrors 或 getGlobalErrors 中的 GlobalErrors 是否会变成 null,因为那会非常糟糕
不会的。在集成测试中为此写一个失败案例应该可以消除你的疑虑。
为 MethodArgumentNotValidException
调用了异常处理程序。所以,它应该有一些字段错误。
但是为了更简洁的代码,我建议检查 hasFieldErrors()
异常处理程序是否与 MethodArgumentNotValidException
.
要获取错误消息,请在您的控制器中使用此代码:
@Autowired
private MessageSource messageSource;
...
FieldError error = bindingResult.getFieldError("fieldName");
String errorMessage = messageSource.getMessage(error, Locale.getDefault());