我有两个Jackson的ObjectMapper实例。 (使用v2.8.3)
第一个实例化如下:
ObjectMapper objectMapper = new ObjectMapper();
另一个是通过@Autowired
从Spring Boot上下文自动装配的。
两者都具有相同的可见性配置:
但是它们为同一个对象生成不同的序列化。我意识到的差异如下:
我想要的是自动装配的映射器还会序列化受保护的瞬态字段。
如果您告诉我两个序列化中其他差异的原因,我也很高兴。
要序列化的示例类的简化版本:
public class ClauseType implements Serializable {
protected transient List<ClauseTypeNoteItem> noteItems;
public ClauseType() {
}
public List<ClauseTypeNoteItem> getNoteItems() {
...
}
public void setNoteItems(List<ClauseTypeNoteItem> value) {
...
}
}
完成ClauseType类:https://pastebin.com/m3h1hesn
完成ClauseTypeNoteItem类:https://pastebin.com/dmphNV4e
修改
我意识到两个实例都有不同的映射器功能。根据文档,在启用自动装配实例的DEFAULT_VIEW_INCLUSION
功能后,它们具有相同的映射器功能,表示为1068991.但是差异仍然存在。我还意识到自动装配的映射器有两个注册模块:org.springframework.boot.jackson.JsonComponentModule
和com.fasterxml.jackson.datatype.joda.JodaModule
。我不确定第二个模块是否会对我得到的结果产生影响。
提前致谢。
答案 0 :(得分:1)
事实证明,Spring注入来自JaxbAnnotationIntrospector
maven依赖关系的jackson-module-jaxb-annotations
。在BeanDescription
s的实例化期间,Jaxb introspector会覆盖我提供的可见性检查器设置。因此,作为解决方案,我将注入一个新的ObjectMapper
bean并将其标记为@Primary
。
如果您想到其他更好的解决方案,请告诉我
答案 1 :(得分:0)
在Spring Boot中,杰克逊server:
port: 8888
spring:
cloud:
config:
discovery:
enabled: true
server:
encrypt.enabled: false
git:
uri: https://git-codecommit.eu-west-2.amazonaws.com/v1/repos/XXXXX
username: XXXXXXXXXX
password: XXXXXXXXXX
由ObjectMapper
对象构建和定制。配置的主要来源是Jackson2ObjectMapperBuilder
属性,如文档中所述: