【问题标题】:Can BindingResult or FieldErrors or GlobalErrors ever be null in my case?在我的情况下,BindingResult 或 FieldErrors 或 GlobalErrors 可以为空吗?
【发布时间】:2018-07-05 02:38:20
【问题描述】:

我有一个如下所示的错误处理程序

@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,因为那会非常糟糕

【问题讨论】:

  • 它永远不会为空。
  • 赞成快速回复谢谢

标签: java spring spring-mvc spring-boot exception-handling


【解决方案1】:

不会的。在集成测试中为此编写一个失败案例应该可以消除您的疑问。

MethodArgumentNotValidException 调用异常处理程序。所以,它应该有一些字段错误。 但是为了更简洁的代码,我建议检查 hasFieldErrors() 是否异常处理程序与 MethodArgumentNotValidException 一起处理其他异常。

【讨论】:

  • 好的,谢谢。通过检查,您的意思是空检查是否正确?
  • 不,hasFieldErrors() 返回一个布尔值,如果返回 true,请执行您的操作
  • 没有。 e.getBindingResult().hasFieldErrors() 流式传输之前。 FieldErrors 不会为空。相反将是一个空列表。所以我希望不需要空检查。
【解决方案2】:

要获取错误消息,请在控制器中使用此代码:

@Autowired
private MessageSource messageSource;
...

FieldError error = bindingResult.getFieldError("fieldName");
String errorMessage = messageSource.getMessage(error, Locale.getDefault());

【讨论】:

    猜你喜欢
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 2016-02-22
    • 2015-08-27
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多