[英]@RequestBody not mapping JSON to Java Object - Spring Boot
[英]Converting a RequestBody json to an Object - Spring Boot
我是 Java 开发的初学者,但以前有过 PHP 和 Python 等编程语言的经验。 对如何在 Spring Boot 上进行开发很少感到困惑。
我正在开发一个具有以下请求的休息 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 这样的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.