Registering JacksonJsonProvider with ObjectMapper + JavaTimeModule to Jersey 2 Client

后端 未结 3 1777
没有蜡笔的小新
没有蜡笔的小新 2021-02-04 09:46

I\'m trying to marshal response containing ISO formatted timestamp like that:

{
...
    \"time\" : \"2014-07-02T04:00:00.000000Z\"
...
}

into <

3条回答
  •  有刺的猬
    2021-02-04 10:46

    Eventually it works if I use solution that is commented in following snippet.

    First of all, you are missing a dependency in your list, that you also have, which is the problem.

    jersey-media-json-jackson

    This module depends on the native Jackson module that has the JacksonJsonProvider. When you register the JacksonFeature (that comes with jersey-media-json-jackson), it registers its own JacksonJaxbJsonProvider, which seems to take precedence over any that you provide.

    When you use the ContextResolver, the JacksonJsonProvider actually looks-up that ContextResolver and uses it to resolve the ObjectMapper. That's why it works. Whether you used the JacksonFeature or registered your own JacksonJsonProvider (without configuring an ObjectMapper for it) the ContextResovler would work.

    Another thing about the jersey-media-json-jackson module, it that it participates in Jersey's auto-discoverable mechanism, which registers it's JacksonFeature. So even if you didn't explicitly register it, it would still be registered. The only ways to avoid it being registered are to:

    1. Disable the auto-discovery (as mention in the previous link)
    2. Don't use the jersey-media-json-jackson. Just use the Jackson native module jackson-jaxrs-json-provider. Thing about this though is that, the jersey-media-json-jackson adds a couple features on top of the the native module, so you would lose those.
    3. Haven't tested, but it seems that if you use JacksonJaxbJsonProvider instead of JacksonJsonProvider, it might work. If you look at the source for the JacksonFeature, you will see that it checks for an already registered JacksonJaxbJsonProvider. If there is one, it won't register it's own.

      The one thing I'm not sure about with this is the auto-discoverable. The order in which it is registered, if it will affect whether or not it catches your registered JacksonJaxbJsonProvider. Something you can test out.

提交回复
热议问题