【问题标题】:json and Spring MVCjson 和 Spring MVC
【发布时间】:2014-11-26 17:20:57
【问题描述】:

我在使用 Spring MVC 和 json 时遇到问题。

我使用 SimplecartJS 生成这样的 json 数据:

  {"currency":"RUR",
    "shipping":250,
    "tax":0,
    "taxRate":0,
    "itemCount":2,
    "item_name_1":"Name of product #1",
    "item_quantity_1":6,
    "item_price_1":159,
    "item_options_1":"",
    "item_name_2":"Name of product #2",
    "item_quantity_2":2,
    "item_price_2":159,
    "item_options_2":"",
    "form":{
    "Fname":"UserName",
    "Phone":"7123456789",
    "Address":"UserAddress",
    "Comment":"Comment Text"
    }
}

我的控制器弹簧

@RequestMapping(value = "/checkorder2", method = RequestMethod.POST, headers = "Accept=application/json")
    public String test (@RequestBody OrderCon orderC)throws Exception{


            ObjectMapper om = new ObjectMapper();
            om.canSerialize(OrderCon.class);
            System.out.println(om);


        return test(orderC);
    }

来自客户端的代码

var url = 'http://localhost:8080/url' 
        jQuery.ajax({ 
            headers: { 
        'Accept': 'application/json',
        'Content-Type': 'application/json' 
            },
          contentType:'application/json',
          dataType: "json", 
          type: "POST", 
          url: url, 
          data: JSON.stringify(data), 

还有我的问题:

当我向控制器发送数据时,我有一个错误 400 Bad request。客户端发送的请求在语法上不正确。添加新项目时,字段名称将为“item_name_2”、“item_name_3”等。我该如何解析。我尝试解析到列表,设置但它不起作用。请帮忙。

UPD1:OrderCon.java

public class OrderCon {

    private List<String> form;
    private List<List<String>> json; 

getters and setters...
 }

【问题讨论】:

  • 发布您的 OrderCon 课程。
  • 添加了 OrderCon 类
  • 您能否为Item 创建一个具有name, quantity, price, options 字段的类,然后在OrderCon 类中列出这些?
  • @Leon 我试过这个,但是当添加新项目 item_name_+i, i++ 例如 "item_name_1" >> "item_name_2" >> "item_name_3" 等等。
  • @Leon 这里是一个 simplecartjs 代码github.com/wojodesign/simplecart-js/blob/master/simpleCart.js string # 1156。我会尝试编辑它。 :)

标签: java json spring-mvc jackson


【解决方案1】:

您收到 400 Bad Request,因为 Spring 正在尝试将传递的 JSON 直接映射到您的 OrderCon 类。

为此,该类需要映射到 JSON 中指定的键。

IE:

JSON:

{ 
  "name" : "foo", 
  "phone": "111-111-1111" 
}

将映射到:

public class someJsonPojo(){

  String name;
  String phone;

  //setters & getters

}

我不认为这会很好用,因为您不会获得一个项目数组,而是将一个项目作为新的键:值附加到列表中。您应该能够修改 JSON,以便可以映射到 Item 对象数组,其中包含名称、数量、价格等。

【讨论】:

    【解决方案2】:

    您无法像现有的那样将该数据解析为类,因为您需要向 Java 类添加动态属性。

    但是,您有两种方法可以获取数据

    第一个选项是将 json 解析为字符串的 HasMap,即。将您的控制器签名更改为

    public String test (@RequestBody Map<String, String> orderC)
    

    另一种选择是使用 JsonNode 并将数据作为树处理,这里是一个示例http://wiki.fasterxml.com/JacksonTreeModel

    我个人会先尝试后者

    【讨论】:

      猜你喜欢
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 2011-09-21
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多