java - 如果 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) 必须是第一行。如果你能分享你的做法,我将不胜感激。
解决方案
我建议先阅读这样的材料:
- https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
- https://www.baeldung.com/exception-handling-for-rest-with-spring
在那里,您有很多想法可以很好地处理所有控制器的异常;-)
考虑使用@ControllerAdvice。您可以根据需要自定义对用户的错误响应,并将这些自定义应用于所有控制器。
推荐阅读
- php - 迭代返回模型的最佳方法
- sas - 带有宏的 PROC 报告
- java - LoadingQueue 实现,如果为空则加载条目
- .net-core - 仅禁用与 HealthCheck 相关的日志记录
- python-3.x - 解释器在这个程序中的工作
- c# - 使用 Linq 连续总和大于 0 的连续元素
- javascript - iOS 智能横幅导致底部工具栏与固定在屏幕底部的元素重叠
- pandas - 如何使用 pandas 合成表
- swift - 如何在 swift 上从 YouTube-ios-player-helper 获取当前时间?
- linux - Ciphertext-Policy Attribute-Based Encryption toolkit key-gen error