如果email的值为空,我需要禁用验证,如果值不为空,请检查它。
@Email(message = "{invalidMail}")
private String email;
答案 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,它将接受它,否则它将进行检查。