将 RequestBody json 转换为对象 - Spring Boot



我是Java开发的初学者,但以前有PHP和Python等编程语言的经验。所以很少对如何进行春季启动进行开发感到困惑。

我正在开发一个具有以下请求的 rest API

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

我做了什么

我创建了一个接受http请求的RestController,并为资源创建了一个函数

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

问题1:如果是任何其他编程语言,如PHP或Python,将会有辅助函数接受json请求并将其转换为我可以轻松处理的对象。

在python中,它就像

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

对于我发出的每个请求,我都必须创建一个类来定义它的所有变量。这是唯一的方法吗?

你需要有 Jackson 依赖关系才能将 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 传递给这个端点。

你可以使用ObjectMapper类,它有convertValue和realValue等方法。

最新更新