web-dev-qa-db-ja.com

Spring MVCでRequestParamと一緒にValidパラメーターを使用できないのはなぜですか?

例:

public String getStudentResult(@RequestParam(value = "regNo", required = true) String regNo, ModelMap model){

ここでregNoパラメーターに@validを使用するにはどうすればよいですか?

11
sofs1

遅い答え。私は最近この問題に遭遇し、解決策を見つけました。次のように実行できます。まず、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 "请求参数不合法";
}

}

あなたは私のデモをチェックすることができます ここ

14
Guisong He

@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

4
Sandeep

これを行う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) {
    }

そして、これらの回答を参照してください ここ および ここ

お役に立てば幸いです。

2
user957654