我使用 javax.validation.constraints
用于验证请求参数的注释。我需要验证电子邮件,所以我创建了一个注释 @EmailValid
,下面提供的片段:
@Email(message = "Please provide a valid email address")
@Pattern(regexp = ".+@.+\\..+", message = "Please provide a valid email address")
@Target({METHOD, FIELD, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = {})
@Documented
public @interface EmailValid {
String message() default "Please provide a valid email address";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
但它仅适用于单个字符串字段,例如:
@ResponseStatus(value = HttpStatus.OK)
@RequestMapping(value = "/sendEmail", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ResponseVO> sendEmail(@EmailValid String email) {
// some code for sending email
}
我需要的是验证电子邮件 map 。我有一张 map Map<String, String> users
其中键是 userId,值是电子邮件。所以我的 Controller 中有这样的方法:
@ResponseStatus(value = HttpStatus.OK)
@RequestMapping(value = "/sendEmails", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ResponseVO> sendEmails(Map<String, String> users) {
// some code for sending email
}
问题是如何使用我的注释 @EmailValid
验证此处的 map 值及其他javax.validation.constraints
注释?
最佳答案
您必须像下面这样实现自定义验证。
首先更改您的 EmailValid.java 文件。
@Target({METHOD, FIELD, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = { EmailValidCheck.class })
@Documented
public @interface EmailValid {
String message() default "Please provide a valid email address";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
现在像下面这样实现这个 ConstraintValidator。
public class EmailValidCheck extends ABaseController implements
ConstraintValidator<EmailValid, Map<String,String>> {
@Override
public void initialize(EmailValid constraintAnnotation) {
}
@Override
public boolean isValid(Map<String,String> mapOfEmail,
ConstraintValidatorContext cvc) {
//Implement Email Validation Login Here.
}
}
像下面这样更改您的 Controller 。
@ResponseStatus(value = HttpStatus.OK)
@RequestMapping(value = "/sendEmails", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ResponseVO> sendEmails(@EmailValid Map<String, String> users) {
// some code for sending email
}
关于java - Spring 将 Map 验证为带有注释的请求参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45921026/