1

次のようにコードします。

....
@RequestMapping( "/test")
    @ResponseBody
    public ResponseTO test(
            @Valid  @RequestBody RequestTO to, HttpServletResponse resp)
    {
           //how do I get validation results here?
        return new ResponseTO("111");
    }

  @InitBinder
  protected void initBinder(WebDataBinder binder) {
      binder.setValidator(new TestValidator());
  }




class TestValidator implements Validator {

    /**
    * This Validator validates just Person instances
    */
    public boolean supports(Class clazz) {
        return RequestTO.class.equals(clazz);
    }

    public void validate(Object obj, Errors e) {
        ValidationUtils.rejectIfEmpty(e, "name", "name.empty");
        RequestTO tx = (RequestTO) obj;
        if (tx.getName().equals("buy")) {
            e.rejectValue("feature", "NOT BUY");
        } 
    }
}   

私が理解できなかった部分は、コントローラーで検証結果を取得する方法です。ありがとう!

4

1 に答える 1

1

Sunilが述べたように、2つのアプローチを混合しています

JSR303 Bean 検証を使用する場合は、次のような Bean フィールドの制約を定義できます。

public class Customer {

    @NotEmpty //make sure name is not empty
    String name;

    @Range(min = 1, max = 150) //age need between 1 and 150
    int age;
 } 

@validBindingResultBean フィールドの検証に使用され、 like を使用してエラーを取得できます

@RequestMapping(value = "/signup", method = RequestMethod.POST)
    public String addCustomer(@Valid Customer customer, BindingResult result) {

        if (result.hasErrors()) {
            return "SignUpForm";
        } else {
            return "Done";
        }
    }  

詳細については、このリンクを確認してください。

または、メソッドを実装Validatorして定義することもできvalidateます(質問で述べたように)。
次に、validateメソッドを呼び出し、BindingResultオブジェクトを渡し、存在する場合はエラーを追加する必要があります。次に、BindingResultオブジェクトにエラーがないかどうかを確認できます。
たとえば。

new TestValidator ().validate(requestTO , bindingResult); // invoking validate method     

そしてエラーをチェック

if (bindingResult.hasErrors()) {
  // Errors are present do something here
}
else
{
  // All is well!!
}

validatorまたは、特定の Bean Spring 構成ファイルに定義することもできます。詳細については、このリンクを確認してください。

于 2012-06-26T08:17:00.290 に答える