有没有办法使用spring mvc 3.1将json反序列化为复杂对象?

时间:2012-09-04 06:15:27

标签: json spring-mvc jackson

我正试图想办法用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一起创建一个特殊的反序列化程序才能执行此操作?

1 个答案:

答案 0 :(得分:1)

正如您所说的复杂对象之前成功序列化一样,我猜你的Spring配置文件没问题,Jackson配置正确。我认为您不需要为MyForm类创建单独的序列化器/反序列化器。

如果您在用户单击具有非空href的链接时进行jQuery AJAX调用,则会出现400错误“错误请求”,因此浏览器会尝试执行默认操作。在这种情况下,您可以看到请求标头仍然具有“text / html”类型,但您尝试发送“application / json”。