是否可以将javascript json ajax POST的多个参数传递给Spring MVC控制器
Is it possible to pass multiple parameters for javascript JSON AJAX POST to Spring MVC controller?
我有已经工作的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();
}
有可能做到这一点吗?如何?
(我已经知道我可以将它们封装到另一个对象/类/实体中)
在 AJAX 调用中,您有以下行
data: JSON.stringify(filters),
更改或扩展此行以向请求添加其他参数。如果您不清楚发生了什么或需要记录/诊断/调试它,您可以随时使用中间变量。
您可以将data
作为 Javascript 键值对象(提供命名参数)、字符串传递,或者像现有代码一样通过对对象进行 JSON 编码来传递。
由于您似乎想要传递更多字段/参数并且已经在使用 JSON 编码,因此在 JSON 编码之前将它们构建到更大的"有效负载"对象中可能是最有意义的。
var paramData = {filter:filters, sorters: mySortersOrWhatever};
console.log('some administration AJAX request', paramData);
$.ajax({
...
data: JSON.stringify(paramData)
看看它如何与 Spring 的请求解析接口——要在 Spring 端解码两个单独的参数,你要么需要名称(不仅仅是请求正文),要么从命名参数解码它们,要么(最简单的)只接受一个大的 JSON 对象作为参数。
这应该是相当直接的 - 一如既往,遵循基本的软件工程原则(记录它,诊断它,修复它直到它工作),以便您可以构建所需的工作功能。
Spring 文档说:
@RequestBody方法参数注释指示方法 参数应绑定到 HTTP 请求正文的值。
这假定 HTTP 请求正文不可分割。因此,您需要做的就是遵循解决方法。在这里你可以看到完全相同的问题Spring REST多个@RequestBody参数,可能吗?
相关文章:
- 函数未将值作为参数传递
- 如何将参数传递到angularJs中的工厂
- 如何在HTML元素上创建函数,而不是将元素作为参数传递
- JavaScript常量-作为参数传递或直接使用
- 如何将javascript对象作为参数传递到c#web服务中
- 将参数传递给函数
- 如何将Gruntfile.js中的参数传递到webdriverio规范
- javascript,将参数传递给函数内部的闭包中的回调
- Javascript-将包含变量的html字符串作为参数传递
- 将字符串作为参数传递给函数onclick event jquery
- 将修改后的数组作为参数传递给函数
- 在嵌套递归指令中将参数传递给父控制器方法
- each()-将额外的参数传递给回调参数
- 代码气味-将布尔控制参数传递给函数
- 如何将自定义参数传递到FullCalendar事件提要
- 将参数传递给函数,同时保留事件处理程序
- 将图标作为参数传递不会;t工作-谷歌地图
- 如何使用按钮将参数传递给函数
- 如何将多个参数传递给输入's onChange处理程序
- 如何从ajax传递参数到spring mvc控制器