我正在尝试将一个复杂的对象发送到 spring mvc 搜索引擎的 ajax Controller ,其中包含 3 个变量:当前页面、每页项目和搜索参数。问题是, Controller 方法的声明不会将 params 变量作为 Map。
我可以发送结构来分别在 Controller 上收集 3 个变量吗?
错误:
Required Map parameter 'params' is not present
var dataToSend = {
'page': 1,
'itemsPerPage': 10,
'params': {
'codItem': "10",
'nameItem': "foo"
}
};
$.ajax({
url: form.attr("action"),
type: 'POST',
data: JSON.stringify(dataToSend),
dataType: 'json',
cache: false
}).success(function(data) {
callback(data);
});
public @ResponseBody HashMap<String, Object> search(@RequestParam(value="params") Map<String, String> params, @RequestParam(value = "page") int page, @RequestParam(value = "itemsPerPage") int itemsPerPage){
};
最佳答案
要正确执行此操作,您需要使用 JSON 库。 Spring 与 Jackson 捆绑在一起。
首先,您需要创建类来表示您的 JSON。
public class MyJson {
int page;
int itemsPerPage;
Map<String, String> params;
public MyJson() {}
... getters/setters
}
您需要更改 $.ajax,像这样发送数据 { data : JSON.stringify(dataToSend)},因为参数需要一个名称。
在你的 Controller 方法中写下:
ObjectMapper mapper = new ObjectMapper();
// readValue(youStringJson, destinactionClass)
MyJson json = mapper.readValue(data, MyJson.class);
如果您有 MyJson params 字段的 getter,您可以迭代 json.getParams() 映射。
关于java - 将复杂的 json 对象发送到 Spring MVC Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25521784/