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