Java 将RequestBody json转换为对象-Spring引导
我是java开发的初学者,但之前有过PHP和Python等编程语言的经验。所以,对于如何在spring boot上继续开发,很少有人感到困惑 我正在开发一个RESTAPI,它有以下要求Java 将RequestBody json转换为对象-Spring引导,java,php,json,spring,spring-boot,Java,Php,Json,Spring,Spring Boot,我是java开发的初学者,但之前有过PHP和Python等编程语言的经验。所以,对于如何在spring boot上继续开发,很少有人感到困惑 我正在开发一个RESTAPI,它有以下要求 { "key":"value", "key1":"value1", "platform_settings":[ {"key":"value"} ] } 我所做的 我创建了一个RestController,它接受http请求并为资源创建了一个函数 public Share share(
{
"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,那么将有一个helper函数,它将接受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;
}
}
实体
包com.payunow.socialsharemodule.models;
导入java.util.Map;
导入javax.persistence.Entity;
导入javax.persistence.GeneratedValue;
导入javax.persistence.GenerationType;
导入javax.persistence.Id;
@实体
公开股{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
私钥;
私有字符串键1;
私人地图平台设置;
公共共享(字符串名称、字符串描述、地图平台设置){
this.key=key;
此参数为0.key1=key1;
this.platform\u settings=平台设置;
}
//JPA
公共共享(){}
公共字符串getKey(){
返回键;
}
公共字符串getKey1(){
返回键1;
}
公共地图getPlatform_设置(){
返回平台设置;
}
}
对于我提出的每个请求,我都必须创建一个类来定义其内部的所有变量。这是唯一的方法吗?将json转换为java对象需要Jackson依赖性。但是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等方法。@Japu_D_Cret这不是重复的。请在评论之前阅读我的问题!有点像,我链接到的被接受的答案使用了
json simple
库,它不会强迫您为响应创建包装器,您可以处理像JSONArray和JSONObject这样的对象,然后相应地转换这些对象。但是如果您每次的响应都是相同的格式,我建议您创建一个包装器类Jackson@Japu_D_Cret如果您看到这个问题,我的问题是关于处理请求以及是否应该始终将请求映射到类。您的答案与J2ME应用程序中的用法有关,而不是与springboot应用程序有关链接错误的答案,请参阅,下面是如何使用JSON simple转换JSON字符串我是否应该始终将请求映射到类
如果您希望从响应处理中获得最后一点性能,那么要么根本不解析JSON,要么使用JSON simple只解析所需的JSON。如果您想要可靠地处理响应并拥有一个强类型对象,这比我建议的更便于用户使用,那么您可以利用较小的时间差,将其完全转换为与Jackson等类似的POJO。如果您想像使用Python一样使用它,json简单库非常接近