Java 使用jQuery AJAX发送多个对象时发生Jackson错误

Java 使用jQuery AJAX发送多个对象时发生Jackson错误,java,jquery,ajax,json,spring,Java,Jquery,Ajax,Json,Spring,检查了与此类似的各种问题,但似乎我做得很好,但在解释服务器上的对象时仍然出现错误。。。一定是遗漏了什么。:) 要点:(1)客户端-jQuery(2)服务器端-Spring+Jackson 我感兴趣的是在PUT请求体中发送一个对象和一个布尔值。对象的结构如下所示: templateRequest: { template: template, deviceIds: deviceIds } 其中,template是一个对象本身,deviceid是一个整数数组。附加的布尔值名为shou

检查了与此类似的各种问题,但似乎我做得很好,但在解释服务器上的对象时仍然出现错误。。。一定是遗漏了什么。:)

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

我感兴趣的是在PUT请求体中发送一个对象和一个布尔值。对象的结构如下所示:

templateRequest: {
    template: template,
    deviceIds: deviceIds
}
其中,
template
是一个对象本身,
deviceid
是一个整数数组。附加的布尔值名为
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 */
}
templaterrequest
为:

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\"])"}
似乎我发送的对象不正确。有什么建议可以解决这个问题吗


非常感谢

您可以拥有一个容器类,它将这两个类作为属性,然后您将在
@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

中传递任意数量的对象。我认为您不可能有两个
@RequestBody
Hmmm。您的意思是生活没有那么简单吗?:)将尝试将布尔值移动到url。我刚刚将其中一个参数切换到url,但您的答案是正确的,因此我将接受它。谢谢