我已经使用了这样的javascript AJAX POST:
客户方:
<script language="JavaScript" type="text/javascript">
var column = "test1";
var filterType = 1;
var values = [];
var filter = { "column" : column, "filterType" : filterType, "values": values};
var filter2 = { "column" : column, "filterType" : filterType, "values": values};
filter2.column = "test2";
var filters = new Array();
filters[0] = filter;
filters[1] = filter2;
$.ajax({
url: "${pageContext.request.contextPath}/api/user_administration/get",
data: JSON.stringify(filters),
type: "POST",
beforeSend: function(xhr)
{
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json");
},
success: function(user)
{
}
});
</script>
服务器端:
@RequestMapping(value = "user_administration/get", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public List<User> get(@RequestBody ColumnFilter[] filters)
{
//do something
return userService.getAll();
}
现在我想传递两个或更多参数。像这样:
@RequestMapping(value = "user_administration/get", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public List<User> get(@RequestBody ColumnFilter[] filters, @RequestBody ColumnSorter[] sorters)
{
//do something
return userService.getAll();
}
有可能实现这一目标吗?怎么样?
(我已经知道我可以将它们封装到另一个对象/类/实体中)
答案 0 :(得分:0)
在您的AJAX通话中,您有
行 data: JSON.stringify(filters),
更改或扩展此行以向请求添加其他参数。 如果你不清楚发生了什么或者需要记录/诊断/调试它,你总是可以使用一个中间变量..
您可以通过JSON编码对象,将data
作为Javascript键值对象(给出命名参数),字符串传递,或者像现有代码那样传递。
因为您似乎想要传递更多字段/参数&amp;正在使用JSON编码,在JSON编码之前将它们构建为更大的“有效载荷”对象可能是最有意义的。
var paramData = {filter:filters, sorters: mySortersOrWhatever};
console.log('some administration AJAX request', paramData);
$.ajax({
...
data: JSON.stringify(paramData)
看看这与Spring的请求解析如何接口 - 解码Spring方面的两个独立参数,你需要名称(不仅仅是请求体),从命名参数解码它们,否则(最简单)只是接受一个大的JSON对象作为参数。
这应该是相当简单的 - 一如既往,遵循基本的软件工程原则(记录,诊断,修复直到它工作),这样你就可以构建所需的工作功能。
答案 1 :(得分:0)
Spring文档说:
@RequestBody方法参数注释表示一个方法 参数应该绑定到HTTP请求体的值。
这假设HTTP请求正文不可分割。因此,您需要做的就是遵循解决方法。在这里,您可以看到完全相同的问题Spring REST multiple @RequestBody parameters, possible?