gpt4 book ai didi

java - 在 spring boot 的请求 json 主体中存在可变键值时处理 RequestBody

转载 作者:行者123 更新时间:2023-12-01 14:34:35 24 4
gpt4 key购买 nike

我是 Java 开发的新手,但我已经在 PHP 和 Python 上开发了几个生产就绪的应用程序。我正在使用 spring boot 框架开发 REST api,发现在处理/解析请求正文方面几乎没有混淆。在我研究过的其他语言中,它要简单得多。

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

但在其他语言中,我不需要将任何内容映射到数组,在 php 中 $_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 个不同的请求怎么办?我需要为他们每个人创建类(class)吗?或者在这个类本身中定义所有变量?或者无论如何,我不需要任何类,是否使用了 jackson 依赖项?

抱歉,如果这是一个转储问题,我是 Java 开发的新手,我真的很感激理解这样的问题 :P

最佳答案

当您在 JSON 中使用键/值参数时,您需要将其映射到后端中的类似结构,因此您需要使用 Map 类型的集合。喜欢Map<String, String> share_platform_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
}

这应该适合你。

关于java - 在 spring boot 的请求 json 主体中存在可变键值时处理 RequestBody,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43088645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com