2017-07-08 81 views
1

我使用Spring Integration ObjectToMapTransformertransformPayload()將我的Java對象轉換爲Map如何在Spring集成中設置JsonObjectMapper的日期格式

一切正常,除了我的對象中的Instant字段被分解爲epochSecondnano,這反過來在持久化數據存儲(MongoDB)時拋出異常。

這是Spring集成JsonObjectMapper被用來轉換ObjectMapprivate final JsonObjectMapper<?, ?> jsonObjectMapper = JsonObjectMapperProvider.newInstance();

我的問題是我怎麼可以配置上述映射日期格式。就像JacksonObjectMapper::configure(),我們有沒有類似的選擇? 我無法在源代碼和互聯網上找到任何東西!

我也嘗試啓用/禁用spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS在我的application.properties,但沒有喜悅!

我在jackson-datatype-jsr310依賴我pom.xml

如何得到正確格式Instant

回答

1

我認爲我們應該增加對定製JsonObjectMapper注射的支持。這樣你就可以根據想要的ObjectMapper構建Jackson2JsonObjectMapper

請,提高對此事JIRA票,不與貢獻猶豫:https://github.com/spring-projects/spring-integration/blob/master/CONTRIBUTING.adoc

同時作爲一種解決辦法,我建議一對ObjectToJsonTransformer/JsonToObjectTransformer

.transform(Transformers.toJson(jsonObjectMapper(), ObjectToJsonTransformer.ResultType.NODE)) 
.transform(Transformers.fromJson(Map.class, jsonObjectMapper())) 
+0

你有沒有意思是:'.transform(Transformers.toJson(jsonObjectMapper(),ObjectToJsonTransformer.ResultType.NODE).transform(message))'而不是? –

+0

基於你的回答,我可以通過定義我自己定製的傑克遜映射器來防止我的'Instant'字段被分解爲'epochSecond'和'nano':ObjectMapper mapper = new ObjectMapper()。findAndRegisterModules();'和然後在你提出的解決方法中使用相同的方法:MapMap對象映射Transformer.transform(Transformer.toJson(new Jackson2JsonObjectMapper(mapper),ObjectToJsonTransformer.ResultType.NODE).transform(message))。getPayload ();' 將爲自定義映射器支持提出JIRA票證。期待貢獻。 –

+0

嗯,我甚至認爲可以包含'findAndRegisterModules()'作爲默認的我們的盒子選項 –

相關問題