JavaオブジェクトのJSON表現よりも複雑な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を返品したくありません。
ジャクソンライブラリを使用すると、次のようなことができると思います。
@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);
}
あなたがオブジェクト/ json-json/objectのシリアライズとデシリアライズを心配する必要はないので、私はむしろSpring mvcでジャクソンを使用する代わりになります。しかし、あなたがまだプロセスにしたい場合、私はグーグルのgsonを使用するのが好きです。
Jackson libを使用できます。jacksonでは、spring mvcを使用してjsonとの間で変換できます。
デフォルトのSpringブート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.cgihttps://projectlombok.org/