0
@InitBinder
public void initBinder(WebDataBinder binder) {
    this.binder = binder;
}

通常のリクエストを処理するとき、関数を呼び出すことができますが、最初のリクエストが ajax リクエストの場合

@RequestMapping("create")
@ResponseBody
public String create(@RequestBody String body) {
    JSONObject result = new JSONObject();
    try{
        JSONObject params = new JSONObject(body);
        T t = buildEntity(params);
        service().save(t);
        result.put(ExtConstant.DATA, t.detailJson());
        result.put(ExtConstant.SUCCESS, true);
    }catch(Exception e){
        result.put(ExtConstant.SUCCESS, false);
        result.put(ExtConstant.ERROR_MSG, e.getMessage());
        e.printStackTrace();
    }
    return result.toString();
}

関数 initBinder が呼び出されていません。バインダーは null です。それは本当に私を混乱させます

4

1 に答える 1

2

はい、それは正しい動作です-@InitBinder注釈付きのメソッドは、バインディングが必要な引数が解決されている場合にのみ呼び出されるため、バインディングが必要なコマンド/モデルオブジェクトのような引数を持つ@RequestMapping/メソッドがある場合は呼び出されます。@ModelAttribute@InitBinder

この特定のケースでは、createメソッドには で注釈が付けられた引数本体があり@RequestBody、この引数はバインダーではなく MessageConverters (json/xml から適切な型へ) によって解決されるため、@InitBinderメソッドは呼び出されません。

于 2012-09-19T00:19:41.900 に答える