遇到与此类似的各种问题,但似乎我做的一切都很好,但在解释服务器上的对象时仍然会出错...必须遗漏一些东西。 :)
要点:(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\"])"}
好像我发错了对象。有任何建议如何解决这个问题?
非常感谢!
答案 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
中传递任意数量的对象。