验证注释约束不起作用

时间:2020-05-21 09:41:35

标签: java spring validation

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

CasinoDto类:

@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);
    }

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

1 个答案:

答案 0 :(得分:3)

字段sales有问题-您不能将@Size用于数字类型。根据{{​​3}}:

受支持的类型为:

CharSequence(评估字符序列的长度)

集合(评估集合大小)

地图(评估地图大小)

数组(评估数组长度)

对于您的情况(使用Float),您需要使用另一组注释:

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

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

所有注释均来自软件包javax.validation.constraints