相关疑难解决方法(0)

JSR-303验证组定义默认组

我有一个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) …
Run Code Online (Sandbox Code Playgroud)

java validation spring bean-validation

14
推荐指数
1
解决办法
6104
查看次数

标签 统计

bean-validation ×1

java ×1

spring ×1

validation ×1