我正试图想办法用spring mvc 3.1通过json传递一个复杂的对象。我也使用knockoutjs,所以把ko.toJSON等同于JSON.stringify。
DeployT
这是ajax调用:
$.ajax({
url: "/doAction",
type: "post",
data: ko.toJSON({"complexObjectA": ko.toJSON(self.complexObjectA()), "complexObjectB": ko.toJSON(self.complexObjectB()), "id": "", "text": ""}),
dataType: "json",
contentType: "application/json; charset=utf-8",
// callback handler that will be called on success
success: function (response, textStatus, jqXHR) {
//dosomething
},
// callback handler that will be called on error
error: function (jqXHR, textStatus, errorThrown) {
// log the error to the console
},
// callback handler that will be called on completion
// which means, either on success or error
complete: function () {
//dosomething
}
});
弹簧控制器代码如下:
@RequestMapping(value = "/doAction", method = RequestMethod.POST)
@ResponseBody
public String doAction(@RequestBody MyForm form, HttpServletRequest request, HttpServletResponse response) {
和MyForm定义如下:
public class MyForm {
private ComplexObjectA complexObjectA;
private ComplexObjectB complexObjectA;
private String id;
private String text;
使用适当的公共getter / setter。
当我尝试拨打此电话时,收到错误400 客户端发送的请求在语法上是不正确的()。
复杂对象都是通过json get获得的,并且从对象到json和js对象都可以很好地序列化。
我是否需要与Jackson一起创建一个特殊的反序列化程序才能执行此操作?
答案 0 :(得分:1)
正如您所说的复杂对象之前成功序列化一样,我猜你的Spring配置文件没问题,Jackson配置正确。我认为您不需要为MyForm类创建单独的序列化器/反序列化器。
如果您在用户单击具有非空href的链接时进行jQuery AJAX调用,则会出现400错误“错误请求”,因此浏览器会尝试执行默认操作。在这种情况下,您可以看到请求标头仍然具有“text / html”类型,但您尝试发送“application / json”。