繁体   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