验证批注约束不起作用



我写了一个测试,应该测试我的类 CasinoDto 的验证,但它们不起作用,断言失败。 导入应该是正确的,也许我写了一个错误的测试,但我不知道错误在哪里。

赌场Dto类:

@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
public class CasinoDto {
@Id
private Long casinoId;
@Size(min = 10, max=100000)
private Float sales;
private String country;
private String place;
@NotNull
private String street;
@NotNull
private String houseNumber;
}

不起作用的测试:

private CasinoDto casinoDto;
private static Validator validator;
private static ValidatorFactory validatorFactory;
@BeforeAll
public static void createValidator(){
validatorFactory = Validation.buildDefaultValidatorFactory();
validator = validatorFactory.getValidator();
}
@BeforeEach
void setCasinoDto(){
casinoDto = CasinoDto.builder()
.casinoId(1L)
.country("yes")
.houseNumber("12")
.place("mareo")
.sales(20000f)
.street("irgendwo")
.build();
}
@AfterEach
void testViolation(){
Set<ConstraintViolation<CasinoDto>> violations = validator.validate(casinoDto);
Assertions.assertFalse(violations.isEmpty());
}
@Test
void testNotNull(){
casinoDto.setStreet(null);
}

我已经检查了依赖项,它们应该是正确的。

字段sales存在问题 - 不能将@Size与数字类型一起使用。根据文档:

支持的类型包括:

字符序列(计算字符序列的长度(

集合(评估集合大小(

地图(评估地图大小(

数组(计算数组长度(

在您的情况下(使用 Float(,您需要使用一组不同的注释:

@NotNull
@DecimalMax("100000")
@DecimalMin("10")
private Float sales;

请注意,我也放置了@NotNull,因为@DecimalMin@DecimalMax认为可为空的元素是有效的(这是 Bean 验证 API 的常用方法(。

所有注释都来自包javax.validation.constraints

最新更新