我有一些JSON对象比我拥有的java对象的JSON表示更复杂。我有构建这些JSON对象的方法,我想直接返回并使用它们。我使用org.json
库来构建我的JSON。我可以通过将JSON对象作为GET
返回来获得String
方法。这是正确的方法吗?
@RequestMapping(value = "/getjson", method = RequestMethod.GET, produces="application/json")
@ResponseBody
public String getJson() {
JSONObject json = new JSONObject();
JSONObject subJson = new JSONObject();
subJson .put("key", "value");
json.put("key", subJson);
return json.toString();
}
现在我想知道如何使用JSON对象?作为字符串并将其转换为JSON对象?
@RequestMapping(value = "/post", method = RequestMethod.POST, produces="application/json", consumes="application/json")
@ResponseBody
public String post(@RequestBody String json) {
JSONObject obj = new JSONObject(json);
//do some things with json, put some header information in json
return obj.toString();
}
这是解决我问题的正确方法吗?我是一个新手,所以请指出任何可以做得更好的事情。请注意:我不想退回POJO。
答案 0 :(得分:21)
我认为使用jackson库你可以做类似下面的事情。
@RequestMapping(value = "/getjson", method = RequestMethod.GET, produces="application/json")
@ResponseBody
public String getJson() {
//your logic
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(json);
}
@RequestMapping(value = "/post", method = RequestMethod.POST, produces="application/json", consumes="application/json")
@ResponseBody
public String post(@RequestBody String json) {
POJO pj = new POJO();
ObjectMapper mapper = new ObjectMapper();
pj = mapper.readValue(json, POJO.class);
//do some things with json, put some header information in json
return mapper.writeValueAsString(pj);
}
答案 1 :(得分:1)
你可以使用jackson lib,jackson允许使用spring mvc转换为/来自json。
答案 2 :(得分:1)
我非常宁愿使用Jackson和Spring mvc,因为你不必担心你的对象/ json-json / object的序列化和反序列化。但如果你仍然想要这个过程我喜欢使用google的gson。
答案 3 :(得分:0)
我无法使用默认的Spring boot bean来进行自动序列化和反序列化。最后,在加入Project Lombok和apache BeanUtils之后,对我来说效果很好。如果无法自动进行序列化,Spring会调用String arg构造函数。
@PostMapping("/create")
@ResponseBody
public User createUser(HttpServletRequest request, @RequestParam("user") User u) throws IOException {
LOG.info("Got user! " + u);
return u;
}
@ToString() @Getter() @Setter() @NoArgsConstructor()
public class User {
private String email;
private String bio;
private String image;
private String displayName;
private String userId;
private long lat;
private long lng;
public User(String json) throws JsonParseException, JsonMappingException, IOException, IllegalAccessException, InvocationTargetException {
ObjectMapper om = new ObjectMapper();
User u = om.readValue(json, User.class);
BeanUtils.copyProperties(this, u);
}
}
http://commons.apache.org/proper/commons-beanutils/download_beanutils.cgi https://projectlombok.org/