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.POST
或RequestMethod.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");
...
}
答案 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
应该相同。
有些问题张贴我。