【发布时间】:2012-10-17 14:56:09
【问题描述】:
假设我有一个具有列表属性的对象:
public class Citizen {
name
List<Tickets> tickets
List<Fines> fines
}
我想通过注解为列表定义一个通用的自定义反序列化器:
public class Citizen {
...
@JsonDeserializer(MyListDeserializer<Tickets>) // <-- generic deserializer
public void setTickets(List<Tickets> tickets) {
this.tickets = tickets;
}
@JsonDeserializer(MyListDeserializer<Fines>) // <-- how can I do that?
public void setFines(List<Fines> fines) {
this.fines = fines;
}
}
我正在寻找一种创建“通用”反序列化器的方法——一种能够反序列化两种类型列表的方法,类似于ContextualDeserializer for mapping JSON to different types of maps with Jackson。
最终目的是在MyListDeserializer 中实现自定义反序列化逻辑,将空字符串"" 反序列化为空列表,但我想了解一种通用方法,而不仅仅是针对空字符串。
【问题讨论】:
-
我认为如果不将您的通用反序列化器子类化以使其具有可靠的类型,这是不可能的。否则,您的反序列化器将不知道它要返回的类型。您可能对
@JsonDeserialze注解的contentAs属性感兴趣。 -
解释一下你到底想要达到什么目的怎么样?您是否尝试自定义 List 本身或值的处理?解决方案不同,您可以对其中一个或两个都使用默认处理,也可以都不使用。
-
@StaxMan 我的最终目标类似于我的另一个问题stackoverflow.com/questions/12933394/…。我想简化这个问题,但也许现在没有足够的信息。我会尝试编辑问题。
-
@Dunes 我在地图上看到了类似的东西:stackoverflow.com/questions/6704992/…,所以我认为这是可能的。
-
好的,所以您确实想更改实际 Collection 的处理方式。