使用jQuery AJAX发送多个对象时出现Jackson错误

时间:2015-08-17 11:40:29

标签: java jquery ajax json spring

遇到与此类似的各种问题,但似乎我做的一切都很好,但在解释服务器上的对象时仍然会出错...必须遗漏一些东西。 :)

要点:(1)客户端 - jQuery(2)服务器端 - Spring + Jackson

我有兴趣在PUT请求的主体中发送一个对象和一个布尔值。该对象的结构如下:

templateRequest: {
    template: template,
    deviceIds: deviceIds
}

其中template是一个对象本身,deviceIds是一个整数数组。附加布尔值名为shouldCheck

客户端发送数据:

$.ajax({
        url: /* the REST service url */,
        type: 'PUT',
        dataType: 'application/json; charset=utf-8',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify({
            templateRequest: {
                template: template,
                deviceIds: deviceIds
            },
            shouldCheck: shouldCheck
        }),
        complete: /* the callback function */
    });

服务器期望这样:

@RequestMapping(value = /* the required URL */, method = RequestMethod.PUT, headers = "Accept=*/*")
@ResponseBody public boolean updateTemplate(
    @RequestBody TemplateRequest templateRequest,
    @RequestBody Boolean shouldCheck) {

    /* redacted */
}

TemplateRequest为:

public class TemplateRequest {

    private AuthenticationTemplate template;
    private int[] deviceIds;

    /* redacted */
}

嗯,到目前为止一切都那么好(或者看起来如此)。但是,当我实际运行此事时,我收到以下错误:

{"General Error":"Unrecognized field \"templateRequest\" (Class
/* TemplateRequest fully qualified name */), not marked as ignorable\n at
[Source: org.apache.catalina.connector.CoyoteInputStream@49720af4; line: 1, column: 21]
(through reference chain: /* TemplateRequest fully qualified name */[\"templateRequest\"])"}

好像我发错了对象。有任何建议如何解决这个问题?

非常感谢!

1 个答案:

答案 0 :(得分:1)

你可以有一个容器类,它将这两个类作为属性,然后你将在@RequestBody中拥有容器类。

容器类

public class RequestInfo{
    private TemplateRequest templateRequest;
    private Boolean shouldCheck;

    //getters and setters
}

休息控制器

@RequestMapping(value = /* the required URL */, method = RequestMethod.PUT, headers = "Accept=*/*")
@ResponseBody public boolean updateTemplate(
     @RequestBody RequestInfo requestInfo){

    /* redacted */
}

这样您就可以在一个@RequestBody中传递任意数量的对象。