Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring boot中,当请求json主体中存在变量键值时处理请求主体_Java_Json_Spring_Spring Mvc_Spring Boot - Fatal编程技术网

Java 在spring boot中,当请求json主体中存在变量键值时处理请求主体

Java 在spring boot中,当请求json主体中存在变量键值时处理请求主体,java,json,spring,spring-mvc,spring-boot,Java,Json,Spring,Spring Mvc,Spring Boot,我对java开发相当陌生,但我已经在PHP和Python上开发了两个可用于生产的应用程序。我正在使用SpringBoot框架开发一个RESTAPI,发现它在处理/解析请求体方面有点混乱。在我研究过的其他语言中,它要简单得多 如果是python/php格式,我不需要显式定义请求的所有参数来处理请求体。但是在java中,我必须预定义POJO类中的所有请求参数并映射它。因此,对于我创建的每个API端点,我必须将Java类中的所有端点都定义为数据层 但是在其他语言中,我不需要将任何东西映射到数组,在ph

我对java开发相当陌生,但我已经在PHP和Python上开发了两个可用于生产的应用程序。我正在使用SpringBoot框架开发一个RESTAPI,发现它在处理/解析请求体方面有点混乱。在我研究过的其他语言中,它要简单得多

如果是python/php格式,我不需要显式定义请求的所有参数来处理请求体。但是在java中,我必须预定义POJO类中的所有请求参数并映射它。因此,对于我创建的每个API端点,我必须将Java类中的所有端点都定义为数据层

但是在其他语言中,我不需要将任何东西映射到数组,在php$\u中,POST保存数据对象

我的问题是

我有以下要求

1.
{
  "category": "product/invoice/event",
  "item_id": "Unique tool identifier id",
  "platforms_id": "1",
  "share_platform_settings": {
    "fb_share_type": "page/profile",
    "fb_share_name": "profilename/pagename",
    "fb_id": "fb_uid/page_id"
  }
}

2.
{
  "category": "product/invoice/event",
  "item_id": "Unique tool identifier id",
  "platforms_id": "1",
  "share_platform_settings": {
    "twitter_username": "page/profile",
    "twitter_user_access_token": "profilename/pagename"
  }
}
我写了一节课

import com.google.common.base.Objects;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

@Entity
public class User {

    @Id
    @NotNull
    @Size(max = 64)
    @Column(name = "id", nullable = false, updatable = false)

    private String id;

    private String category;

    private String item_id;

    private String platforms_id;

    private String fb_share_type;

    private String fb_share_name;

    private String fb_id;


    User() {
    }

    public User(final String id, final String category,final String item_id,final String platforms_id,final String fb_share_type,final String fb_share_name,final String fb_id) {
        this.id = id;
        this.category = category;
        this.item_id = item_id;
        this.platforms_id = platforms_id;
        this.fb_share_type = fb_share_type;
        this.fb_share_name = fb_share_name;
        this.fb_id = fb_id;
    }

    public String getId() {
        return id;
    }

    public String getCategory() {
        return category;
    }

    public String getItemId() {
        return item_id;
    }

    public String getFbShareType() {
        return platforms_id;
    }

    public String getFbShareName() {
        return category;
    }

    public String getFbId() {
        return category;
    }

    public String setCategory(String category) {
        return this.category = category;
    }


    public void setId(String id) {
        this.id = id;
    }

    public void setItemId(String item_id) {
        this.item_id = item_id;
    }

    public void setFbShareType(String fb_share_type) {
        this.fb_share_type = fb_share_type;
    }

    public void setFbShareName(String fb_share_name) {
        this.fb_share_name = fb_share_name;
    }

    public void setFbId(String fb_id) {
        this.fb_id = fb_id;
    }

    @Override
    public String toString() {
        return Objects.toStringHelper(this)
                .add("id", id)
                .add("item_id", item_id)
                .add("fb_share_type", fb_share_type)
                .add("fb_share_name", fb_share_name)
                .add("fb_id", fb_id)
                .add("category", category)
                .toString();
    }
}
我可以使用
@RequestBody request-request
将请求映射到类, 但是我已经用我的请求参数定义了类请求。但是我的请求参数不断变化,我有一个不同的json请求结构2。在那种情况下我该怎么办?如果我在同一个API上有n个不同的请求,该怎么办?我是否需要为它们中的每一个创建类?或者定义这个类本身的所有变量?还是说,我不需要任何类,jackson依赖性是否用于此


很抱歉,如果这是一个转储问题,我对java开发非常陌生,我非常感谢理解这样一个问题:p

当您在JSON中使用键/值参数时,您需要在后端使用类似的结构对其进行映射,因此您需要在实体中使用类型为
map
的集合,如
map share\u platform\u settings

您的实体将如下所示:

@Entity
public class User {

    @Id
    @NotNull
    @Size(max = 64)
    @Column(name = "id", nullable = false, updatable = false)
    private String id;

    private String category;
    private String item_id;
    private String platforms_id;
    private Map<String, String> share_platform_settings;

    //Constructors, getters and setters
}
@实体
公共类用户{
@身份证
@NotNull
@尺寸(最大值=64)
@列(name=“id”,nullable=false,updateable=false)
私有字符串id;
私有字符串类别;
私有字符串项\u id;
私有字符串平台\u id;
私有地图共享平台设置;
//构造函数、getter和setter
}

这应该适合您。

您可以使用地图来保存您的请求body@Ajeesh我的回答对你有帮助吗?