【问题标题】:How to configure Jackson mapper如何配置杰克逊映射器
【发布时间】:2018-11-18 13:54:02
【问题描述】:

如何为 http4k 全局配置 json 序列化程序?例如,snake case 字段名称或将 DateTime 格式化为 ISO8601。

【问题讨论】:

  • 解决方案可能类似于报告给 http4k 的关于此问题的答案:github.com/http4k/http4k/issues/183 您必须在其中创建自己的 ConfigurableJackson 子类型 ...这不是具有可扩展性的最简单方法,但是似乎是一种选择。
  • 是的,我也这样做了。从ConfigurableJackson 创建另一个对象子类。您介意为我的问题创建一个答案吗?

标签: kotlin http4k


【解决方案1】:

由于ObjectMapper 实例是private within ConfigurableJackson,因此您在构建后无法对其进行任何配置。

因此,您要么需要构建自己的 ConfigurableJackson 直接实例并传入自定义的 ObjectMapper,要么需要使用自己的类对 ConfigurableJackson 进行子类化。然后在构造函数期间,创建一个ObjectMapper参见下面的示例)或拦截一个传递给你的构造函数并更改其设置。

无论您做什么,请确保您不会破坏 http4k 框架或其他任何可能使用同一实例的东西。可以看到http4k使用的默认declared in their source code

object Jackson : ConfigurableJackson(ObjectMapper()
    .registerModule(defaultKotlinModuleWithHttp4kSerialisers)
    .disableDefaultTyping()
    .configure(FAIL_ON_UNKNOWN_PROPERTIES, false)
    .configure(FAIL_ON_IGNORED_PROPERTIES, false)
    .configure(USE_BIG_DECIMAL_FOR_FLOATS, true)
    .configure(USE_BIG_INTEGER_FOR_INTS, true)
)

您可以使用与上述类似的代码来创建您自己的实例。

有关此主题的一些对话请参见此线程:https://github.com/http4k/http4k/issues/183

【讨论】:

  • 在 3.108.0 版本中,他们有 changed 配置 Jackson 的方式。您可能需要更改答案以匹配新更改。
【解决方案2】:

您不一定需要扩展 ConfigurableJackson - 只是扩展它是最方便的方法(根据我们的经验)。

所有配置都是通过调整注入到 ConfigurableJackson 构造函数中的 ObjectMapper 实例来完成的 - ConfigurableJackson 本身只是提供了围绕该映射器的包装器 API。问题与 Jackson 的标准配置有关,因此您应该直接从 Jackson 文档中寻求您的特定问题(蛇案例等)的答案,因为 http4k 不拥有该 API。

【讨论】:

    猜你喜欢
    • 2011-10-22
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 2013-02-21
    相关资源
    最近更新 更多