- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经多次遇到过这种模式。在伪代码中:
公共(public)类 BlahResource {
如果(这个错误)
构建响应(BAD_REQUEST);
如果(那个错误)
构建响应(冲突);
...
做一点事();
返回构建响应(成功);
}
看起来还不错,但是当您有一百万个错误条件需要处理时,Resource 类中会积累太多的业务逻辑,并且噪音很快就会淹没代码实际执行的内容.
由于在资源中错误条件正在返回某些内容,因此从服务抛出的异常对我来说似乎不正确。封装返回条件和设置的不同组合的状态对象似乎有点矫枉过正。
在如何以逻辑、清晰的方式进行编码方面,我是否遗漏了一些明显的东西?可能是我缺少的一些功能性/ Guava /基于 lambda 的东西,或者只是一个常规的 OO 解决方案。
最佳答案
有一个完整的JSR-349 Bean Validation解决这些问题的规范
来自规范目标
Validating data is a common task that occurs throughout an application, from the presentation layer to the persistence layer. Often the same validation logic is implemented in each layer, proving to be time consuming and errorprone. To avoid duplication of these validations in each layer, developers often bundle validation logic directly into the domain model, cluttering domain classes with validation code that is, in fact, metadata about the class itself. This JSR defines a metadata model and API for JavaBean validation. The default metadata source is annotations, with the ability to override and extend the meta-data through the use of XML validation descriptors.
hibernate-validator是引用实现,但请注意,该实现不依赖于任何层(也不依赖于 Web 或持久层)
回到您的资源代码,这意味着,通过利用自定义约束,您的资源将类似于
public class BlahResource {
@CheckBadRequest
@CheckConflict
private field
...
}
当验证失败时,错误将存储在 ConstraintViolation 内您可以通过Validator获取界面。这些是您应该构建错误处理机制的中心点,这也是一个伪
Set<Constraintviolation<Resource>> violations = validator.validate(Resource);
关于java - REST 资源类中封装错误处理的良好模式或风格是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28257858/
嗨,我正在考虑开发一种文件传输程序,想知道我是否想要尽可能好的加密,我应该使用什么? 我会用 C# 开发它,所以我可以访问 .net 库 :P在我的 usb 上有一个证书来访问服务器是没有问题的,如果
我创建的这个计算两个数组的交集是线性的方法的复杂度(在良好、平均、最差的情况下)? O(n) public void getInt(int[] a,int[] b){ int i=0; int
我已经能够使用 RTCPeerConnection.getStats() API 获得 WebRTC 音频调用的各种统计信息(抖动、RTT、丢包等)。 我需要将整体通话质量评为优秀、良好、一般或差。
基本问题: 如果我正在讲述/修改数据,我应该通过索引硬编码索引访问文件的元素,即 targetFile.getElement(5);通过硬编码标识符(内部翻译成索引),即 target.getElem
在 Linux 上,我想知道要调用什么“C”API 来获取每个 CPU 的统计信息。 我知道并且可以从我的应用程序中读取 /proc/loadavg,但这是系统范围的负载平均值,而不是每个 CPU 的
在客户端浏览器中使用 fetch api,GET 或 POST 没有问题,但 fetch 和 DELETE 有问题。它似乎将 DELETE 请求方法更改为 OPTIONS。 大多数研究表明是一个cor
我是一名优秀的程序员,十分优秀!