我有这样一个对象要反序列化:
public class RelationsInput {
Relation relation1;
Relation relation2;
}
鉴于班级 Relation
看起来像这样:
public class Relation {
RelationType relationtype;
... (more fields)
}
``` `RelationType` 是en enum,不是将反序列化的值,而所有其他值都是。
有没有可能,我可以“注入”字段的枚举值 `relationType` 在类的字段上有注解 `RelationInput` ? 如下所示
public class RelationsInput {
@RelationType(RelationType.OWNER)
Relation owner;
@RelationType(RelationType.TENANT)
Relation tenant;
}
Jackson提供这样的东西吗?
3条答案
按热度按时间brjng4g31#
恐怕没有这种事。如果您想使用类似的注解,可以使用自定义反序列化程序。首先创建如下内容:
然后实施实际操作:
和
然后使用以下方法:
wwtsj6pe2#
您可以尝试使用
com.fasterxml.jackson.databind.deser.ContextualDeserializer
接口。它允许使用上下文创建反序列化程序示例。参见以下示例:
有效载荷的上述代码:
印刷品:
另请参见:
使用jackson反序列化为字符串或对象
如何将依赖注入自定义反序列化程序
jackson-将内部对象列表反序列化为一个更高级别的列表
yrefmtwq3#
如果按要求执行,relationtype字段的值将始终相同。无论如何,一个可行的解决方案是使用个性化序列化程序反序列化程序,如下所示:
为了前后转换枚举,我建议使用map<string,relationtype>,super simple和work perfect,如下所示:
使用get(字符串)进行序列化,使用get(值)进行反序列化(查找某个值的键)这是一个常规示例,当您要序列化没有默认序列化程序的对象时,请参阅此示例以获取更多信息如何使用jackson将color java类解析为json?