Java 两个Jackson ObjectMapper生成不同的序列化

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(); 序列化字段的顺序 受保护瞬态字段的序列化

我有两个Jackson的ObjectMapper实例。(使用v2.8.3)

第一个示例如下所示:

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.*
属性,如文档中所述:


事实证明,Spring注入了一个
JaxbAnnotationIntrospector
,它来自
jackson模块jaxb注释
maven依赖项。在
BeanDescription
s的实例化过程中,Jaxb内省器会覆盖我提供的可见性检查器设置。因此,作为一个解决方案,我将注入一个新的
ObjectMapper
bean,并将其标记为
@Primary


如果您想到其他更好的解决方案,请让我知道

您可以向班级展示您正在序列化的内容吗。因为对我来说,它们都只序列化公共字段。@RuslanAkhundov刚刚更新了postSpring启动,请明确Spring提供的默认Jackson映射器具有一些现成的自定义属性。你能把范围缩小到这些差异吗?是的,默认的视图包含功能在两种设置中都是不同的。但即使启用了它,我仍然有不同的结果。请看我的编辑。