弹簧MVC @InitBinder不叫处理时AJAX请求(spring mvc @InitBinde

2019-09-22 14:17发布

@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没有被调用的函数,粘结剂为空。 真正让我困惑

Answer 1:

是的,这是正确的行为- @InitBinder时需要绑定的参数正在解决你的情况,如果你有一个注解的方法只被调用,所以@RequestMapping / @ModelAttribute方法与喜欢你的命令/模型对象的参数需要再结合@InitBinder将被调用。

在这种特殊情况下create方法有哪些标注有一个参数体@RequestBody ,这种说法不是由粘结剂,但了MessageConverter(从JSON / XML为适当的类型)解决,所以@InitBinder方法不叫。



文章来源: spring mvc @InitBinder is not called when processing ajax request