如何解决我是否需要在每次需要时声明Jackson的ObjectMapper?
我有一个多线程Java应用程序,在其中使用了Jackson库。每当我需要ObjectMapper时,我都会在需要使用它的类中声明它。有时我使用objectMapper.configure()自定义此ObjectMapper,但并非总是如此。 这是不好的做法吗?有什么方法可以只声明一两次吗?
解决方法
Jackson ObjectMapper
在不同情况下具有许多不同的配置参数,虽然可以跨线程共享实例进行操作,但通常需要相当不同的设置(例如,当您使用使用camel_case
命名,甚至使用YAML或CSV映射器的REST API。
基于这个原因,我不建议将ObjectMapper
变成bean,而不是将Function<Foo,Bar>
或String
变成bean。 Bean类型不够具体。
相反,ObjectMapper
更像API的一部分,因为诸如“使用camel_case
”或“将日期写为ISO 8601字符串”之类的设置不是'就像缓存过期时间一样,它们反映了合同的固定部分。
我建议创建工厂方法,这些方法将根据用例的特定要求构建新实例。这些方法可以存在于整个公司共享的库中,以在变量命名,日期/时间处理等方面实施一致的映射:
public static ObjectMapper companyObjectMapper() {
// company-wide standard configuration
...
}
public static ObjectMapper specificRestApiObjectMapper() {
// uses Unix epoch for dates and camel_case
...
,
尽可能重用objectmapper。因为它是线程安全的。如果任何类在objectmapper中需要不同的配置,则仅实例化此类的单独objectmapper。
我建议不要有多个具有相同配置的实例。
,我发现实例化new ObjectMapper()花费的时间很长,因此,您绝对应该重用该对象,而不是每次都重复创建该对象。
我通常在使用它的类中将其声明为记录器(但是,这是否对您有意义当然取决于您的特定要求):
private static final ObjectMapper objectMapper = new ObjectMapper();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。