Java 两个Jackson ObjectMapper生成不同的序列化
我有两个Jackson的ObjectMapper实例。(使用v2.8.3) 第一个示例如下所示:Java 两个Jackson ObjectMapper生成不同的序列化,java,spring,spring-boot,jackson2,Java,Spring,Spring Boot,Jackson2,我有两个Jackson的ObjectMapper实例。(使用v2.8.3) 第一个示例如下所示: ObjectMapper objectMapper = new ObjectMapper(); 另一个是通过@autowired从Spring引导上下文自动连接的 两者具有相同的可见性配置,如下所示: 但它们为同一对象生成不同的序列化。我意识到的区别如下: ObjectMapper objectMapper = new ObjectMapper(); 序列化字段的顺序 受保护瞬态字段的序列化
ObjectMapper objectMapper = new ObjectMapper();
另一个是通过@autowired
从Spring引导上下文自动连接的
两者具有相同的可见性配置,如下所示:
但它们为同一对象生成不同的序列化。我意识到的区别如下:
ObjectMapper objectMapper = new ObjectMapper();
- 序列化字段的顺序
- 受保护瞬态字段的序列化。(自动连线实例根本不会序列化它们。)
- 序列化字段中的大小写差异,即前者生成“monitoringUserID”,而后者生成“monitoringUserID”
public class ClauseType implements Serializable {
protected transient List<ClauseTypeNoteItem> noteItems;
public ClauseType() {
}
public List<ClauseTypeNoteItem> getNoteItems() {
...
}
public void setNoteItems(List<ClauseTypeNoteItem> value) {
...
}
}
公共类ClauseType实现可序列化{
受保护的临时清单项目;
公共子句类型(){
}
公共列表getNoteItems(){
...
}
public void setNoteItems(列表值){
...
}
}
完整子句类型类:
完整的ClauseTypeNoteItem类:
编辑:
我意识到这两个实例都有不同的映射器特性。根据文档,在启用autowired实例的DEFAULT\u VIEW\u INCLUSION
功能后,它们具有与1068991相同的映射器功能。然而,差异仍然存在。我还意识到自动连线映射器有两个注册模块:org.springframework.boot.jackson.JsonComponentModule
和com.fasterxml.jackson.datatype.joda.JodaModule
。我不确定第二个模块是否对我得到的结果有影响
提前感谢。在Spring Boot中,Jackson
ObjectMapper
由Jackson2ObjectMapperBuilder对象构建和定制。配置的主要来源是spring.jackson.*
属性,如文档中所述:
JaxbAnnotationIntrospector
,它来自jackson模块jaxb注释
maven依赖项。在BeanDescription
s的实例化过程中,Jaxb内省器会覆盖我提供的可见性检查器设置。因此,作为一个解决方案,我将注入一个新的ObjectMapper
bean,并将其标记为@Primary
如果您想到其他更好的解决方案,请让我知道您可以向班级展示您正在序列化的内容吗。因为对我来说,它们都只序列化公共字段。@RuslanAkhundov刚刚更新了postSpring启动,请明确Spring提供的默认Jackson映射器具有一些现成的自定义属性。你能把范围缩小到这些差异吗?是的,默认的视图包含功能在两种设置中都是不同的。但即使启用了它,我仍然有不同的结果。请看我的编辑。