Ara*_*oft 15 constraints java-ee bean-validation
我检查可用约束的列表中javax.validation包,我注意到,有一个注释@null迫使现场为空.
如果我已经知道它应该为null,我不明白将它添加到我的字段有什么意义.
例如,看看这个类:
public class MyClass{
@NotNull
private String myString1;
@Null
private String myString2;
// getter setters...
}
Run Code Online (Sandbox Code Playgroud)
@NotNull完全有道理.我不希望myString1是空的.但@Null让myString2没用.有一个字段应始终为null的重点是什么.
您可能只想@Null在某些情况下与“验证组”结合使用以验证空约束。
您将定义验证组为简单界面
public interface FirstSave {}
Run Code Online (Sandbox Code Playgroud)
然后在约束中使用它
public class MyClass {
@Null(groups = FirstSave.class)
private LocalDate lastUpdate;
}
Run Code Online (Sandbox Code Playgroud)
如果lastUpdate 不是 null,则调用validator.validate(myClassInstance) 不会产生约束冲突(使用了默认组),但是调用validator.validate(myClassInstance, FirstSave.class)会。
你也有可能提供关于如何使用注解自己的实现,也就是我见过的验证方法被标注了@Null其中null的意思是一切正常的方法返回。在后台,如果带注释的方法返回的结果不是空值,可能会有自定义实现,但我没有深入研究代码...
小智 5
@Null是一个非常重要的注释。这并非无用。让我展示一个常见的用例。假设有一个 DAO(实体)对象,其 ID 是自动生成的。
如果您对 DTO 和 DAO 使用单独的类,@GetMapping则返回 DTO 列表,不会出现问题。另一方面,@PostMapping添加新元素要求输入 DTO 不得包含 Id 字段,即使存在,它也必须为 null 或未定义。此类输入在与 DTO 对象进行转换时,要求 Id 必须为空。为此,@Null唯一的选择
@PutMapping期望 id 不能为空,因此@NotNull当我们期望更新发生在单个对象上时,id 字段是必需的。
@DeleteMapping仅当我们想要删除具有已知 Id 的对象时才需要整数 Id 。
还有一些复杂的情况,通常不会被处理,但有意义
@GetMapping可用于任何提供的字段,但如果提供了除 Id 之外的任何字段,则 Id 必须为空。如果提供了 ID,则其他所有内容都必须为空。
还有一个复杂的@PutMapping要求,其中提供部分信息用于更新,并且期望剩余字段为旧值。这里非空字段被更新。
另一个注解@DeleteMapping是用来删除或移除的。如果计算为空白,则可以通过@Null约束来实现。
通常的 CRUD 操作过于简单,但不适合实际期望的用例。
所有这些需求组合都可以分组列出。并且可以通过组属性提供约束,并@Validated可以根据需要应用单独的标记接口。
| 归档时间: |
|
| 查看次数: |
4004 次 |
| 最近记录: |