Я новичок в разработке 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;
}
}
Для каждого запроса я должен создать класс, определяющий все его переменные внутри. Это единственный способ сделать это?
Вы должны иметь зависимость Джексона для покрытия 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 в эту конечную точку.
Других решений пока нет …