如何访问POST主体中发送的转换后的JSON对象的字段?

时间:2014-09-20 20:34:27

标签: java json spring rest spring-mvc

My Spring @Controller需要以JSON格式访问传递对象的字段。我想避免构建许多类来映射每个请求响应。例如,我需要连接存储两个外键。它们作为{"key1": 1,"key2": 2}传递给控制器​​。如果我没有一个对象有2个字段来映射这些属性,如何访问这些字段?如何设置Spring控制器方法?

我的代码:

@RequestMapping(value = "/addProductPart", method = RequestMethod.POST, consumes = "application/json")
    @ResponseBody
    public String addProductPart(Model model, @RequestBody Object json,
                                 BindingResult result){

        // access somehow key1 and of json Object

更新 我知道我可以使用RequestMethod.GET@RequestParam将其工作,但由于我修改了数据,因此我需要RequestMethod.POSTRequestMethod.PUT

解决:

@RequestMapping(value = "/addProductPart", method = RequestMethod.PUT, consumes = "application/json")
    @ResponseBody
    public String addProductPart(Model model, @RequestBody Object   obj){
...
int p = (Integer)((Map)obj).get("part");
...
}

2 个答案:

答案 0 :(得分:4)

默认情况下,Spring使用Jackson反序列化JSON。如果指定Object作为参数类型,Jackson会将JSON反序列化为LinkedHashMap。您可以转换变量并通过Map#get(Object)访问元素。

或者,您可以将方法参数声明为适合JSON结构的某个POJO类型,并且Jackson将反序列化为该类型。然后,您可以使用其getter来检索数据。

答案 1 :(得分:1)

您可以执行以下操作:

@RequestMapping(value = "/addProductPart", method = RequestMethod.POST, consumes = "application/json")
@ResponseBody
public String addProductPart(@RequestBody GetData obj){
   System.out.println(obj.jObj.getString("key1"));
}

此处GetData是将在其中接收数据的类&将输入数据映射到其中。

GetData class

public class GetData{
  private JSONObject jObj;

  //getter-setter

  // if you are getting more than one element or array of json then :

  private JSONArray jArray();
  // getter-setter
}

如果您想要JSonArray,那么您可以对其进行操作。

它的相关代码教程是Here

然后还有一些问题发布给我。

您也可以在方法调用中直接使用JSonObject,但如果您获得更多数据,那么最好使用Class&传递给那里。

要记住收到的JSonObject&名称declared in class应该相同。

有些问题张贴我。