【发布时间】:2020-04-16 09:08:02
【问题描述】:
我有以下 Json
{
"coreId" : "1",
"name" : "name",
"additionalValueList" : [
{
"columnName" : "allow_duplicate",
"rowId" : "10",
"value" : "1"
},
{
"columnName" : "include_in_display",
"rowId" : "11",
"value" : "0"
},
...e.t.c
]
},
...e.t.c
和Java类
class DTO {
@JsonProperty("coreId")
private Integer id;
private String name;
private Boolean allowDuplicate;
private Boolean includeInDisplay;
}
如何轻松地将“additionalValueList”中的值映射到相应的 java 字段。例如,“columnName”字段中的 Json 值 - 'allow_duplicate' = DTO.allowDuplicate。 实际上,我知道如何使用带有 @JsonDeserialize 注释的自定义反序列化器和像这样的 smth 来做到这一点。但我有 40 多个 DTO,为每个文件创建自己的反序列化器并不是一个好主意。我正在寻找具有例如1个反序列化器的解决方案(因为'additionalValueList'中的值结构对于所有实体都是相同的)并将参数(我想映射到该字段的字段名称)传递给将在'中找到的自定义反序列化器带有“列名称”=参数的附加值列表实体(我从注释传递)并返回“值”。 示例
class DTO {
@JsonProperty("coreId")
private Integer id;
private String name;
@JsonDeserialize(using = MyCustDeser.class,param = allow_duplicate)
private Boolean allowDuplicate;
@JsonDeserialize(using = MyCustDeser.class,param = include_in_display)
private Boolean includeInDisplay;
}
这将是一个很好的解决方案,但可能不容易实现。但是我将非常感谢您的所有建议。谢谢。
【问题讨论】:
-
您不能在属性级别执行此操作。您需要为
DTO类编写一个通用的自定义反序列化器并将这个逻辑放在那里。要实施通用解决方案,我们需要更多信息。另一个DTO课程是什么样子的?它们是否具有与additionalValueList数组中的对象相关的常规属性和布尔属性的相同结构?您是否在一个包中拥有所有这些DTO类?你用的是哪个版本的Java?
标签: java json jackson deserialization json-deserialization