例:
public String getStudentResult(@RequestParam(value = "regNo", required = true) String regNo, ModelMap model){
ここでregNoパラメーターに@validを使用するにはどうすればよいですか?
遅い答え。私は最近この問題に遭遇し、解決策を見つけました。次のように実行できます。まず、MethodValidationPostProcessor
のBeanを登録します。
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
次に、@Validated
をコントローラーのタイプレベルに追加します。
@RestController
@Validated
public class FooController {
@RequestMapping("/email")
public Map<String, Object> validate(@Email(message="请输入合法的email地址") @RequestParam String email){
Map<String, Object> result = new HashMap<String, Object>();
result.put("email", email);
return result;
}
}
また、ユーザーが無効なメールアドレスでリクエストした場合、ConstraintViolationException
がスローされます。そして、あなたはそれをキャッチすることができます:
@ControllerAdvice
public class AmazonExceptionHandler {
@ExceptionHandler(ConstraintViolationException.class)
@ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST)
public String handleValidationException(ConstraintViolationException e){
for(ConstraintViolation<?> s:e.getConstraintViolations()){
return s.getInvalidValue()+": "+s.getMessage();
}
return "请求参数不合法";
}
}
あなたは私のデモをチェックすることができます ここ
@Validは、Beanの検証に使用できます。私はそれが単一の文字列パラメータで使用されるのを見たことがありません。また、バリデーターを構成する必要があります。
@Validアノテーションは、標準のJSR-303 Bean Validation APIの一部であり、Spring固有の構造ではありません。 Spring MVCは、適切なバリデーターが構成されている限り、バインド後に@Validオブジェクトを検証します。
参照: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html
これを行う1つの方法は、次のようなラッパーBeanを作成することです。
public class RegWrapperBean{
@NotNull
String regNo ;
public String getRegNo(){
return regNo ;
}
public void setRegNo(String str){
this.regNo=str;
}
}
ハンドラーメソッドは次のようになります。
@RequestMapping(value="/getStudentResult", method=RequestMethod.POST)
public String getStudentResult(@Valid @ModelAttribute RegWrapperBean bean,
BindingResult validationResult, Model model) {
}
そして、これらの回答を参照してください ここ および ここ 。
お役に立てば幸いです。