我有一个Spring Boot应用程序,我使用RestTemboard调用Rest API,我收到以下JSON格式的响应:
{
"data": [
{
"id": "1",
"type": "type1",
"config": {
"property1" : "value1",
"property2" : "value2"
}
},
{
"id": "2",
"type": "type2",
"config": {
"property3" : "value3",
"property4" : "value4",
"propArray": [ "element1", "element2"]
}
}
]
}
数组“data”中的单个元素几乎没有不同的结构(上面的两个例子),我想用单个元素映射不同的类类型,这取决于元素“type”的值。
例如,值“type1”应该映射到类类型为“type1”的对象,依此类推。
我创建了如下类:MyResponse:
public Class MyResponse {
List<Data> data;
..
\\getter and setters
}
数据:
public Interface Data {}
类型1:
public Class Type1 implements Data {
private String property1;
private String property2;
..
\\getter and setters
}
类型2:
public Class Type1 implements Data {
private String property3;
private String property4;
private List<String> propArray;
..
\\getter and setters
}
如何映射上述条件结构?
我能想到的唯一方法是将返回值转换为字符串,将其转换为JSONObject,并对其进行处理以创建类的实例。例如
String response = restTemplate.<your-uri>
JSONObject jsonObject = new JSONObject(response);
if (jsonObject.get(type).equals(type1) {
Type1 type1 = new Type1();
// set values
} else if (jsonObject.get(type).equals(type2) {
Type2 type2 = new Type2()
// set values
}
然而,这是不可伸缩的,如果您要添加越来越多的类型,那么维护干净的代码将是非常困难的。
另一种方法是创建一个通用类,并作为该类的列表接收响应。通过这种方式,Spring boot/jackson可以进行映射。同样,您必须添加代码来从这个常规类创建其他类。正如Sam在评论中指出的,这将是一个首选,因为Jackson比JSONObject更快。下面是一个示例类,
class Response {
private Integer id;
private String type;
private Map<String, Object> config;
}
您仍然需要检查类型并映射到相应的类。
与其编写如此混乱的代码,我会考虑如果你能控制它,我是否可以重新构建你的设计/发送的响应。
我一直在研究GraphQL作为我的一些RESTAPI的替代品,虽然我认为我已经对基本知识了如指掌,就像我目前看到的大多数内容一样,但似乎缺少了一个重要的功能。 比如说,我有一系列这样的物品: 应用程序需要所有这些对象的映射,按ID索引: 我写过的每个API都能够以这样的格式返回结果,但我正在努力寻找一种用GraphQL来做到这一点的方法。我一直在运行第101个问题,但这更多地涉及未知模式。就我而言
让我们假设我有以下json 如何在java中创建一个自定义类来映射它?我试过这个班的形状 并且形状是 用Jackson地图绘制器绘制地图 正如预期的那样,给我一个错误: 我想要"0008005"作为字段值而不是字段键,这些值是根据API动态变化的,所以如何映射这个json,有没有其他直接的方法最后一个选项op自定义反序列化?
例如,我有以下接口映射器: 在代码中,您可以看到映射和一些默认方法,其中包含其他映射。如何在Mapstruct映射中使用这些方法,以便Mapstruct使用这些方法在字段中填充值?
本文向大家介绍apache-spark 使用Gson将JSON映射到自定义类,包括了apache-spark 使用Gson将JSON映射到自定义类的使用技巧和注意事项,需要的朋友参考一下 示例 使用Gson,您可以读取JSON数据集并将其映射到自定义类MyClass。 由于Gson不可序列化,因此每个执行程序都需要自己的Gson对象。而且,MyClass必须可序列化才能在执行程序之间传递。 请注意
我有一个像这样的json,它嵌套在其中一个字段中- 我创建了一个自定义类, 在我的服务类中,我正在读取json并将其映射到我的EmailTemplate类中,但是映射失败了。这里有什么可以用的? 例外情况: 我试着添加 但这也不起作用。
问题内容: 我有一个带有四列ID,名称,颜色,形状的食用水果。 该表中的条目为: 现在,我将一个实体类Fruit映射到上表。 在我的DAO类中,代码是: 显而易见,在上面的查询中运行将返回3行。 我有一个简单的TO类FruitSearchTO 此TO符合我的查询返回的行。 但是在我的DAO中运行类似: 抛出异常java.lang.ClassCastException:[Ljava.lang.Obj