![](/img/trans.png)
[英]@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.