Создание и использование пользовательских объектов JSON в Spring службах RESTful

У меня есть некоторые объекты JSON, которые более сложны, чем JSON-представления объектов java, которые у меня есть. У меня есть методы, которые создают эти объекты JSON, и я хотел бы вернуться и использовать их напрямую. Я использую библиотеку org.json для создания моих JSON. Я мог бы получить метод GET, работая, возвращая объект JSON как 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.

Ответ 1

Я думаю, используя библиотеку Джексона, вы можете сделать что-то вроде ниже.

@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);
}

Ответ 3

Я скорее предпочитаю использовать Jackson с Spring mvc, так как вам не нужно беспокоиться о сериализации и десериализации ваших объектов /json -json/object. Но если вы все еще хотите этот процесс, мне нравится использовать gson google.

http://www.javacreed.com/simple-gson-example/