Jackson要求在无参数构造函数上使用public修饰符,而jdk8的Optional只提供静态方法。可能的解决方法是什么?一般来说,如果我必须使用一个第三方库来提供遵循此模式的类,我该怎么办?
public
Optional
56lgkhnf1#
不,Jackson不需要一个公共的无参数构造函数;任何访问级别(甚至private)都可以工作。但是如果没有提供自定义反序列化器,它确实需要一个无参数构造函数。新类型所需要的,通常是扩展模块。实际上有计划增加一个“JDK 8模块”,因为核心Jackson目前只需要1.6,并且基线在不久的将来不太可能移动。但是增加对新类型的支持应该相对容易:例如,JacksonGuava数据类型模块(https://github.com/FasterXML/jackson-datatype-guava)增加了对Guava的optional的支持。同时,您可以从那里复制反序列化器,通过您定义的SimpleModule使用它。
private
optional
SimpleModule
nwlls2ji2#
Optional支持已经添加到Jackson中,可以通过将Jdk8Module添加到ObjectMapper:
Jdk8Module
ObjectMapper
JsonMapper objectMapper = JsonMapper.builder().addModule(new JavaTimeModule()).build();
2条答案
按热度按时间56lgkhnf1#
不,Jackson不需要一个公共的无参数构造函数;任何访问级别(甚至
private
)都可以工作。但是如果没有提供自定义反序列化器,它确实需要一个无参数构造函数。新类型所需要的,通常是扩展模块。实际上有计划增加一个“JDK 8模块”,因为核心Jackson目前只需要1.6,并且基线在不久的将来不太可能移动。但是增加对新类型的支持应该相对容易:例如,JacksonGuava数据类型模块(https://github.com/FasterXML/jackson-datatype-guava)增加了对Guava的
optional
的支持。同时,您可以从那里复制反序列化器,通过您定义的SimpleModule
使用它。nwlls2ji2#
Optional
支持已经添加到Jackson中,可以通过将Jdk8Module
添加到ObjectMapper
: