【问题标题】:How to set date format for JsonObjectMapper in Spring Integration如何在 Spring Integration 中为 JsonObjectMapper 设置日期格式
【发布时间】:2017-12-12 23:23:17
【问题描述】:

我正在使用 Spring Integration ObjectToMapTransformertransformPayload() 将我的 Java 对象转换为 Map

除了我的对象中的 Instant 字段被分解为 epochSecondnano 之外,一切正常,这反过来又在数据存储 (MongoDB) 中持久化时引发异常。

这是用于将Object 转换为Map 的Spring 集成JsonObjectMapperprivate final JsonObjectMapper<?, ?> jsonObjectMapper = JsonObjectMapperProvider.newInstance();

我的问题是如何为上述映射器配置日期格式。就像JacksonObjectMapper::configure()一样,我们这里有没有类似的选择? 我在源代码和互联网上都找不到!

我还尝试在我的application.properties 中启用/禁用spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS,但没有任何乐趣!

我的pom.xml 中有jackson-datatype-jsr310 依赖项

如何获取正确格式的Instant

【问题讨论】:

    标签: spring-boot jackson spring-integration objectmapper jsr310


    【解决方案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()))
    

    【讨论】:

    • 您的意思是:.transform(Transformers.toJson(jsonObjectMapper(), ObjectToJsonTransformer.ResultType.NODE).transform(message))
    • 根据您的回答,我可以通过将我自己的自定义杰克逊映射器定义为:ObjectMapper mapper = new ObjectMapper().findAndRegisterModules(); 然后使用相同的方法来防止我的Instant 字段被分解为epochSecondnano在您建议的解决方法中:Map objectMap = (Map<String, Object>) transformer.transform(Transformers.toJson(new Jackson2JsonObjectMapper(mapper), ObjectToJsonTransformer.ResultType.NODE).transform(message)).getPayload(); 将为自定义映射器支持提出 JIRA 票。期待贡献。
    • 好吧,我什至认为默认情况下可以将 findAndRegisterModules() 包含为我们的默认选项
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    相关资源
    最近更新 更多