geo*_*ydv 14 java validation spring bean-validation
我有一个bean,它有很多用JSR-303验证注释注释的字段.现在有一个新要求,其中一个字段是强制性的,但仅限于某些条件.
我环顾四周,找到了我需要的东西,验证组.
这就是我现在拥有的:
public interface ValidatedOnCreationOnly {
}
@NotNull(groups = ValidatedOnCreationOnly.class)
private String employerId;
@Length(max = 255)
@NotNull
private String firstName;
@Length(max = 255)
@NotNull
private String lastName;
Run Code Online (Sandbox Code Playgroud)
但是,当我在单元测试中运行此验证时:
@Test
public void testEmployerIdCanOnlyBeSetWhenCreating() {
EmployeeDTO dto = new EmployeeDTO();
ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
Set<ConstraintViolation<EmployeeDTO>> violations = vf.getValidator().validate(dto, EmployeeDTO.ValidatedOnCreationOnly.class);
assertEquals(violations.size(), 3);
}
Run Code Online (Sandbox Code Playgroud)
事实证明,所有非组注释验证都被忽略,我只得到1次违规.
我可以理解这种行为,但我想知道是否有一种方法可以使该组包含所有非注释参数.如果不是,我必须做这样的事情:
public interface AlwaysValidated {
}
public interface ValidatedOnCreationOnly extends AlwaysValidated {
}
@NotNull(groups = ValidatedOnCreationOnly.class)
private String employerId;
@Length(max = 255, groups = AlwaysValidated.class)
@NotNull(groups = AlwaysValidated.class)
private String firstName;
@Length(max = 255, groups = AlwaysValidated.class)
@NotNull(groups = AlwaysValidated.class)
private String lastName;
Run Code Online (Sandbox Code Playgroud)
我正在使用的真正的类有更多的字段(大约20个),所以这种方法转变为一种明确的方式,将验证指示为一大堆.
任何人都可以告诉我是否有更好的方法?也许是这样的:
vf.getValidator().validate(dto, EmployeeDTO.ValidatedOnCreationOnly.class, NonGroupSpecific.class);
Run Code Online (Sandbox Code Playgroud)
我在一个春季项目中使用它,所以如果春天有另一种方式,我会很高兴知道.
Ali*_*ani 24
中有一个Default组javax.validation.groups.Default,表示默认的Bean Validation组.除非明确定义了组列表:
Default组Default组你可以扩展这个组:
public interface ValidatedOnCreationOnly extends Default {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6104 次 |
| 最近记录: |