Java 使用jQuery AJAX发送多个对象时发生Jackson错误
检查了与此类似的各种问题,但似乎我做得很好,但在解释服务器上的对象时仍然出现错误。。。一定是遗漏了什么。:) 要点:(1)客户端-jQuery(2)服务器端-Spring+Jackson 我感兴趣的是在PUT请求体中发送一个对象和一个布尔值。对象的结构如下所示: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
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,但您的答案是正确的,因此我将接受它。谢谢