【发布时间】:2018-09-04 14:57:06
【问题描述】:
我想为 ObjectMapper 创建多个 bean,主要以日期格式区分。
我已经写了以下代码-
@Configuration
public class ObjectMapperConfig {
@Primary
@Bean
public ObjectMapper createDefaultObjectMapper() {
return new ObjectMapper();
}
@Bean(name="AOMapper")
public ObjectMapper createFacebookObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZ"));
return objectMapper;
}
@Bean(name="BOMapper")
public ObjectMapper createTwitterObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy"));
return objectMapper;
}
}
虽然我可以使用 @Qualifier 注释来使用 AOMapper 和 BOMapper,但其他仅使用 ObjectMapper 而没有 Qualifier 注释的第三方包无法获得默认的 ObjectMapper。
有出路吗?
更新:以下是我得到的异常
[com.myorg.service.xyz.client.XyzClient]: Factory method 'getUnstarted' threw exception; nested exception is java.lang.RuntimeException: java.io.UncheckedIOException: Cannot construct instance of `java.time.Instant` (no Creators, like default construct, exist): no String-argument constructor/factory method to deserialize from String value ('2018-03-19T22:56:33.339Z')
at [Source: (ByteArrayInputStream); line: 1, column: 161] (through reference chain: com.myorg.service.xyz.client.WatchResult["updates"]->java.util.ArrayList[0]->com.myorg.service.xyz.client.Announcement["announceTime"]) (code 200)
我从上面了解到的是,不知何故,XyzClient 没有获得正确的默认 ObjectMapper,因此无法反序列化日期格式
【问题讨论】:
-
您能分享一下第三方软件包给出的错误吗?
-
这些包是专有的,不允许做任何更改。
-
但是您能否仅分享错误以了解错误的确切原因?我不要求做任何改变:)
-
您能否分享一下您在执行此操作时遇到了什么异常?这将显示您所做的努力...
-
没关系,您可以为相同的 Class 类型创建 n 个 bean。唯一的问题是,如果您尝试创建具有相同名称的 bean 或尝试将 bean 限定为相同的类类型或 bean 被类类型使用...
标签: spring-boot java-8 jackson fasterxml