jackson的ObjectMapper 对于集合类List<User> ,只有一个对象User,根据类名序列化 生成com. 包名 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS). 请举例
时间: 2024-10-19 14:04:14 浏览: 22
Jackson的`ObjectMapper` 可以通过`@JsonTypeInfo`注解来处理集合序列化时的类型识别问题,尤其是当集合中的元素属于不同子类时。例如,假设你有一个`User`接口,以及几个实现了它的子类如`Employee`, `Customer`:
```java
@JsonTypeInfo(
use = JsonTypeInfo.Id.CLASS, // 使用类信息作为类型的标识
include = JsonTypeInfo.As.PROPERTY, // 将类型信息添加到JSON对象的某个属性上
property = "type", // 类型信息将存储在这个名为"type"的属性中
defaultImpl = User.class // 默认类型
)
public abstract class User {}
class Employee extends User {
// Employee属性...
}
class Customer extends User {
// Customer属性...
}
List<User> userList = Arrays.asList(new Employee(), new Customer());
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(userList);
// 输出结果:
// [
// {"type": "com.example.Employee", ...},
// {"type": "com.example.Customer", ...}
// ]
```
在这个例子中,`ObjectMapper`会为每个`User`的实例创建一个包含其实际类型信息的对象,并将其放入指定的`type`属性中。这允许你在解析JSON时能准确地识别出具体的子类。
阅读全文