java - 将复杂的 json 对象发送到 Spring MVC Controller

标签 java ajax json spring spring-mvc

我正在尝试将一个复杂的对象发送到 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/

相关文章:

java - Neo4j - 如何处理不兼容的 RestGraphDatabase 调用

javascript - 如何在for循环中调用ajax函数

jquery - 数据表中的复选框选中状态

javascript - 数据在数据表中返回未定义的ajax加载

java - 在 Java 中从 HTTP 响应解析 JSON 数组

javascript - 如何从window.onerror中解析ReferenceError对象(第5个参数,在Google Chrome中实现)

java - 正则表达式:获取字符串前后不带字符的特定字符串

java - java中私有(private)方法下模拟外部调用

java - 如何找到 Java 中哪些对象/线程导致堆空间错误? (VisualVM、内存分析器)

javascript - jQuery 加载 Div 损坏