如果值不为null时如何启用javax注释,而值为null时如何禁用javax注释?

时间:2018-07-16 09:58:41

标签: java spring validation spring-boot annotations

如果email的值为空,我需要禁用验证,如果值不为空,请检查它。

@Email(message = "{invalidMail}")
private String email;

2 个答案:

答案 0 :(得分:0)

仅使用预定义的验证注释集无法达到此结果。

您必须创建一个自定义验证批注,该批注根据规格执行验证。您可以从Baeldung的文章Spring MVC Custom Validation中获得启发。

这是注释。

import static org.hamcrest.Matchers.instanceOf;

...

@Test
public void testBinInfoControllerInsertBIN() throws Exception {
    when(this.repository.save(mockBinInfo)).thenReturn(mockBinInfo);

    this.mockMvc.perform(post("/insert")
            .content("{\"id\":\"42\", \"bin\":\"touhou\", \"json_full\":\"{is_json:true}\", \"createAt\":\"18/08/2018\"}")
            .accept(MediaType.APPLICATION_JSON_UTF8_VALUE)
            .contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)
            )
        .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
        .andExpect(status().isCreated())
        .andExpect(jsonPath("$[0]", instanceOf(BinInfo.class)))
        .andExpect(jsonPath("$[0].bin", is("touhou")));


}

还有一个类,如果输入不为null,则该类实际上根据电子邮件Regex本身执行验证。返回true,否则返回null。请注意,此类必须实现ConstraintValidator<A extends Annotation, T>

@Documented
@Constraint(validatedBy = MyEmailValidator.class)     // Class which performsthe validation
@Target({ ElementType.FIELD })                        // Applicable to a field
@Retention(RetentionPolicy.RUNTIME)
public @interface MyEmail {
    String message() default "The email is invalid";  // The default message
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

答案 1 :(得分:0)

我找到了答案,几乎所有的Java验证批注都接受null,因此如果我的值为null,它将接受它,否则它将进行检查。