我正在构建一个RESTAPI,它接受用户以以下JSON格式输入的内容。细节是嵌套的JSON对象,其键值是动态的,其关联的数据类型也是动态的。如下图所示,颜色是字符串列表,ram是整数列表,值可以是字符串、布尔值和整数类型。考虑到具体情况,如何构建请求POJO类将请求JSON转换为请求对象在键、值及其数据类型方面是动态的。在下面的JSON中,细节可以有0。。n键值,其值数据类型可以是字符串列表、整数列表、仅字符串、仅布尔值或仅整数值。如何将我的请求映射到spring boot后端中的POJO。
{
name : {
subtitle : "iPhone xr",
title: "The new iphone"
},
specifics: {
"color" : ["red","blue","green"],
"ram" : [ 32 , 64 ],
"length": 7,
"model" : 10 ,
"hasLight" : true
},
description: {
short: " This is short description",
long: " This is long description ",
language: "en"
}
}
班
class Item{
private Title title;
private Specifics specifics; //How to make this dynamic and key-value with distinct data type
private Description description;
}
public class Title {
private String subtitle;
private String title;
}
public class Description {
private String shortDes;
private String longDes;
private String language;
}
您可以使用映射,而不是使用POJO类将请求JSON转换为请求对象。然后你必须分析地图
我能想到的唯一可能的解决方法是将属性映射如下:
class Item {
private Title title;
private Map<String, Object> specifics;
private Description description;
}
现在最糟糕的部分是当你需要(如果你真的需要)处理数据的时候。考虑以下示例:
public static void main(String[] args) {
Map<String, Object> specifics = new HashMap<>();
specifics.put("color", List.of("red","blue","green"));
specifics.put("ram", List.of(32 , 64));
specifics.put("length", 7);
specifics.put("model", 10);
specifics.put("hasLight", true);
Item item = new Item(specifics);
for (Object object : item.getSpecifics().values()) {
if (object instanceof List) {
System.out.println("::::: List :::::");
for (Object listObject : (List) object) {
if (String.class.isAssignableFrom(listObject.getClass())) {
System.out.println("String: " + object);
}
if (Number.class.isAssignableFrom(listObject.getClass())) {
System.out.println("Number: " + object);
}
}
}
if (object instanceof Number) {
System.out.println("Number: " + object);
}
if (object instanceof Boolean) {
System.out.println("Boolean: " + object);
}
}
}
public static class Item {
private Map<String, Object> specifics;
public Item(Map<String, Object> specifics) {
this.specifics = specifics;
}
public Map<String, Object> getSpecifics() {
return specifics;
}
}
正如你所看到的那样,处理每一种可能性的逻辑是丑陋的,并且只会随着其他可能性而变得更丑陋。不幸的是,它周围没有。
问题内容: 我正在尝试为如下对象创建动态映射: 我希望属性为嵌套类型,该类型是我在下面的映射中使用nested_feature模板定义的,并且按预期工作。但是,我也想让属性的嵌套对象中的每个属性都带有定义的其他属性。我尝试了第二个nested_template模板,但没有成功。 不幸的是,属性中的属性是从另一个进程创建的,几乎可以是任何名称/值对。关于如何使用动态模板将属性设置为嵌套的任何建议,以
我试图为对象创建一个动态映射,如下所示:
我有一个requestbody作为, 我无法使用spring将此映射到请求映射。我试过用下面的,但没有用。 公共类请求映射{ } 如何映射请求正文? 编辑Json中的大小写敏感键。
我必须做一个用户/权限表,其中“权限”是X轴,“用户”是Y轴。表的其余部分由复选框填充,这些复选框指示X用户是否具有Y权限。这两个都是动态长度,每个API都可以访问另一个API。即:权限API为每个权限,具有该权限的用户数组。此外,用户API为每个用户,用户拥有的权限数组。 > 我有嵌套贴图的问题,我觉得这样做很昂贵?(如果有40个权限和350个用户,我们将讨论14k复选框) 如何为每个复选框保存
我试图动态解析一些JSON到一个Map 但是当我尝试使用一些更复杂的JSON和嵌套信息时失败了。我试图从json解析示例数据。组织 我得到以下错误 异常在线程"main"com.fasterxml.jackson.databind.JsonMapping异常:不能反序列化实例的java.lang.字符串START_OBJECT令牌 有没有办法将复杂的JSON数据解析成映射?
有没有什么方法可以将嵌套的JSON值映射到字段而不需要额外的类?我有一个JSON响应 但是在中,我只需要值。因此,我决定创建Kotlin数据类,并尝试使用注释的选项 下面的代码正在工作 我有几个嵌套值,为它们创建额外的类是相当夸张的。还有比为节点创建嵌套类更好的方法吗?