我試圖獲取含有ISO格式的時間戳這樣的迴應:與ObjectMapper + JavaTimeModule註冊JacksonJsonProvider澤西島2客戶端
{
...
"time" : "2014-07-02T04:00:00.000000Z"
...
}
爲ZonedDateTime
場在我的域模型對象。如果我使用的解決方案在下面的代碼片段中有所評論,最終它可以正常工作。有許多類似的問題,但我希望得到具體的答案 另一種使用JacksonJsonProvider
和ObjectMapper + JavaTimeModule
的方法有什麼問題?
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
JacksonJsonProvider provider = new JacksonJsonProvider(mapper);
Client client = ClientBuilder.newBuilder()
// .register(new ObjectMapperContextResolver(){
// @Override
// public ObjectMapper getContext(Class<?> type) {
// ObjectMapper mapper = new ObjectMapper();
// mapper.registerModule(new JavaTimeModule());
// return mapper;
// }
// })
.register(provider)
.register(JacksonFeature.class)
.build();
錯誤,我得到:
javax.ws.rs.client.ResponseProcessingException: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of java.time.ZonedDateTime: no String-argument constructor/factory method to deserialize from String value ('2017-02-24T20:46:05.000000Z')
at [Source: org.glassfish.jersey.me[email protected]53941c2f
項目依賴關係:
compile 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.8.7'
compile 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.8.7'
compile 'com.fasterxml.jackson.core:jackson-core:2.8.7'
compile 'com.fasterxml.jackson.core:jackson-databind:2.8.7'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.8.7'
compile 'org.glassfish.jersey.core:jersey-client:2.25.1'
編輯
反序列化發生在這裏:
CandlesResponse<BidAskCandle> candlesResponse = webTarget.request()
.header(HttpHeaders.AUTHORIZATION,"Bearer "+token)
.accept(MediaType.APPLICATION_JSON)
.get(new GenericType<CandlesResponse<BidAskCandle>>(){});
中添加了我選擇了'JacksonJaxbJsonProvider'選項,因爲它看起來更直接,並且不涉及額外的依賴關係。 –