对于如果属性在抽象类中这个利用@JsonTypeInfo 和 @JsonSubTypes 很容易实现,如果这个属性与将要反序列化在同一层级,那个应该怎么做,将下面举个例子,基于spring-boot环境
-
public interface Item{ } public class Person{ private Integer age; private Item item; } // age<7 public ChildItem implement Item { private String read; private String sleep; } // 7< age < 50 public AdultItem implement Item { private String work; private String playGame; } // age > 50 public OldItem implement Item { private String walk; private String talk; } -
上面定义Person对象,里面有item,具体实现类是通过age来决定jackson具体实例化那个类
-
此时使用@JsonTypeInfo 和 @JsonSubTypes不好处理,它针对是json中都相同属性,根据属性值判断,可惜这里属性都不相同?
解决方案
1、完全手动实现反序列化
-
如果实体不是很复杂这个还是可以接受,如果bean字段特别多,那么不好操作了
-
也就实现StdDeserializer的deserialize方法
-
示例代码(spring boot)下
-
@JsonComponent public class ItemDeserializer extends StdDeserializer<Item> { protected ItemDeserializer() { super(Item.class); } @Override public Item deserialize(JsonParser p, DeserializationContext ctxt) throws IOExcepti

最低0.47元/天 解锁文章
2025





