2

カスタム JSR 303 検証が呼び出されません。これが私のコードです

私の春の設定は

<mvc:annotation-driven />

私のコントローラーのハンドラーメソッド:

@RequestMapping(value="update", method = RequestMethod.POST , 
                consumes="application/json" , 
                produces="application/json"))
@ResponseBody
public  String update(@Valid @RequestBody MyBean myBean){
    return process(myBean);
}

MyBean (ValidMyBeanRequest で注釈が付けられています):

@ValidMyBeanRequest
public class MyBean {

    private int id;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

ValidMyBeanRequest 注釈:

@Target({ TYPE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {MyBeanValidator.class})
public @interface ValidMyBeanRequest {
    String message() default "{validMyBeanRequest.message}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

MyBeanValidator クラス:

public class MyBeanValidator implements 
             ConstraintValidator<ValidMyBeanRequest, MyBean> {

    @Override
    public void initialize(ValidMyBeanRequest constraintAnnotation) {
        // TODO Auto-generated method stub
    }

    @Override
    public boolean isValid(MyBean myBean, ConstraintValidatorContext context) {
        boolean isValid = true;

        int id = myBean.getId();
        if(id == 0){
            isValid = false;
        }
        return isValid;
    }
}

私の http POST リクエストには以下の JSON データがあります:

{id:100}

問題は、MyBeanValidator の isValid が呼び出されないことです。Spring 3.1.0 を使用しており、HibernateValidator はクラスパスにあります。

私が欠けているものを見てください??

Update : POST リクエスト タイプを含むようにハンドラー メソッドを更新し、値を消費、生成します。また、JSON データを含む http 要求も含めました。

4

1 に答える 1

1

モデルを正しく取得すると仮定すると、この場合、1 つのことを除いて、すべてを正しく行っています。検証の結果を手動で処理する必要があります。

これを実現するには、 BindingResultオブジェクトをハンドラー パラメーターのリストに追加し、必要な方法で検証制約を処理する必要があります。

@RequestMapping(value="update")
@ResponseBody
public  String update(@Valid @ModelAttribute @RequestBody MyBean myBean, BindingResult result) {
    if (result.hasErrors()){
        return processErrors(myBean);
    }
    return process(myBean);
}
于 2013-04-01T09:09:10.837 に答える