Преобразование RequestBody JSON в объект — Spring Boot

Я новичок в разработке Java, но у меня есть опыт работы с такими языками программирования, как PHP и Python. Так мало путают о том, как приступить к весенней загрузке с разработкой.

Я разрабатываю API отдыха, который имеет следующий запрос

{
"key":"value",
"key1":"value1",
"platform_settings":[
{"key":"value"}
]
}

Что я сделал

Я создал RestController, который принимает http-запрос, и создал функцию для ресурса.

public Share share(@RequestBody final Share share) {
LOGGER.debug("This is the request", share);
return share; //
}

Вопрос 1: Если это был какой-либо другой язык программирования, например PHP или Python, будет вспомогательная функция, которая примет запрос json и преобразует его в объект, с которым я легко могу работать.

В питоне это так же просто, как

import json
import requests

response = requests.get(...)
json_data = json.loads(response.text)
//can work on json_data anyway I want.

Но в java мне нужно будет создать класс POJO или использовать в качестве зависимости сущность jackson / JPA, которая отобразит запрос в класс (который я должен предварительно определить с помощью запросов).

Есть ли лучший способ сделать это? Для каждого запроса, который я делаю, мне нужно будет создать класс, которому можно сопоставить запрос, и мне нужно будет определить класс

Entity

package com.payunow.socialsharemodule.models;

import java.util.Map;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;import javax.persistence.Id;@Entity
public class Share {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

private String key;
private String key1;
private Map<String,String> platform_settings;

public Share(String name, String description,Map<String,String> platform_settings) {
this.key = key;
this.key1 = key1;
this.platform_settings = platform_settings;
}

//for JPA
public Share() {}

public String getKey() {
return key;
}

public String getKey1() {
return key1;
}

public Map<String,String> getPlatform_settings() {
return platform_settings;
}

}

Для каждого запроса я должен создать класс, определяющий все его переменные внутри. Это единственный способ сделать это?

1

Решение

Вы должны иметь зависимость Джексона для покрытия json-объекта java. Но Spring предоставляет его по умолчанию, поэтому вам не нужно добавлять его явно.

Вам не нужен субъект JPA. Это необходимо только тогда, когда вы хотите сохранить полученные данные в базу данных.
Чтобы получить запрос, вам не нужно создавать отдельный класс pojo. Посмотрите на этот код

   @PostMapping("/json")
public JSONObject getGeneric(@RequestBody String stringToParse){
JSONParser parser = new JSONParser();
JSONObject json = null;
try {
json = (JSONObject) parser.parse(stringToParse);
} catch (ParseException e) {
e.printStackTrace();
}
return json;
}

Как вы можете видеть здесь, он принимает строку как запрос и преобразует ее в общий JSONObject. Таким образом, вы можете передать любой JSON в эту конечную точку.

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]