簡體   English   中英

將 RequestBody json 轉換為對象 - 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM