首页 > 解决方案 > 如果 BindingResults 有错误,如何在 API 中抛出一个漂亮的异常?

问题描述

这样做的唯一方法是必须在每个控制器中重复这样的代码吗?

  if (bindingResult.hasErrors()) {
     List<FieldError> fieldErrorList = bindingResult.getFieldErrors();
     AtomicReference<String> message = new AtomicReference<>("");

        fieldErrorList.stream()
                .forEach(fieldError -> message.set("Field name: " + fieldError.getField()
                        + " Rejected Value: " + fieldError.getRejectedValue()
                        + " Message " + fieldError.getDefaultMessage()));
        throw new EntityNotFoundException(message.get());
    }

或者也许有更好的方法来做到这一点。我不能把这个逻辑放在 Exception 类中,因为 super(message) 必须是第一行。如果你能分享你的做法,我将不胜感激。

标签: javaspring

解决方案


我建议先阅读这样的材料:

  1. https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
  2. https://www.baeldung.com/exception-handling-for-rest-with-spring

在那里,您有很多想法可以很好地处理所有控制器的异常;-)

考虑使用@ControllerAdvice。您可以根据需要自定义对用户的错误响应,并将这些自定义应用于所有控制器。


推荐阅读