jackson的ObjectMapper 对于集合类List<User> ,只有一个对象User,根据类名序列化 生成com. 包名 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS)
时间: 2024-10-19 19:15:07 浏览: 17
使用fasterxml.jackson反序列化json串
Jackson的ObjectMapper在处理集合类如List<User>时,如果你想要基于类名而不是ID进行序列化,并且每个元素都表示为独立的对象,可以使用@JsonTypeInfo注解来实现这一点。当你在`@JsonTypeInfo`中设置`use = JsonTypeInfo.Id.CLASS`,Jackson会通过类的实际类型来区分不同的实例。
例如,你的配置可能会像这样:
```java
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.ObjectMapper;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class UserSerializerConfig {
ObjectMapper mapper = new ObjectMapper();
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
public String serialize(List<User> users) {
return mapper.writeValueAsString(users);
}
}
```
在这个例子中,当序列化List<User>时,每个User对象会被包含其对应的全限定类名`com.包名.User`作为额外的属性`@class`。这样,即使所有用户都是同一种类型的User,它们在JSON中看起来也是各自独立的。
阅读全文