1
我使用javax.validation.constraints
批注验证请求参数。我需要验证电子邮件,所以我创建了一个注释@EmailValid
,摘要如下规定:使用注释验证映射为请求参数
@Email(message = "Please provide a valid email address")
@Pattern(regexp = "[email protected]+\\..+", 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<String, String> users
其中key是userId,value是一封电子邮件。所以我有这样的方法在我的控制器:
@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
等javax.validation.constraints
注解这里映射值?
谢谢你,漂亮的做法,但我怎么能发送自定义消息响应,而不是他们的约束冲突的消息?我正在使用休息,所有错误响应应该是相同的 – user3872496
请按照以下文档:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/ControllerAdvice。 html。这个全局异常处理程序,所以使用这个你可以在建议控制器中处理MethodArgumentNotValidException.class异常。例如https://gist.github.com/matsev/4519323 – vikas
谢谢!想出了自定义错误响应的控制器建议解决方案。还有一种方法是将'BindingResult result'作为额外参数传递给控制器方法,检查'result.hasErrors()'并返回错误响应。 – user3872496