jackson的ObjectMapper 对于List集合类List<User> 根据类名 生成反序列化 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS)
时间: 2024-10-19 22:15:06 浏览: 54
Jackson的`ObjectMapper`在处理List集合类如`List<User>`时,通过`@JsonTypeInfo`注解可以指定在序列化或反序列化时如何识别列表元素的类型。当你设置了`use = JsonTypeInfo.Id.CLASS`,这意味着Jackson会根据每个对象的实际类名来区分和处理,而不是基于固定的类型名称或枚举。
例如,在你的User类上,你可能会这样做:
```java
@JsonTypeInfo(
use = JsonTypeInfo.Id.CLASS,
include = JsonTypeInfo.As.PROPERTY,
property = "@type",
defaultImpl = User.class)
public abstract class User {
// 用户属性...
}
@JsonSubTypes({
@JsonSubType(value = AdminUser.class, name = "admin"),
@JsonSubType(value = RegularUser.class, name = "regular")
})
public abstract class User {
// 公共用户属性...
}
```
在这个例子中,`AdminUser`和`RegularUser`都是`User`的子类,并分别有自己的`@JsonSubType`声明。当序列化一个`List<User>`时,`ObjectMapper`会自动添加`@type`字段,表示该元素的具体类型信息。而在反序列化时,它将根据`@type`值找到对应的子类实例。
阅读全文