Search code examples
jsonjerseyjacksonjax-rsjersey-client

How to extract ObjectMapper from JAX-RS Client?


I am using Jersey JAX-RS client (version 2.0). I know it is using a Jackson ObjectMapper to generate and parse JSON. I want to use that same object to generate JSON for some java classes so that I can write them to a log.

I know I can create a new instance of ObjectMapper but I prefer to request Jersey Client to give me a reference to the one it is using. How can I do this? Jersey 2.0 is aware of Jackson because it includes a JacksonFeature class that is used to configure the Jackson feature in the first place.


Solution

  • I solved this by adding the following static members:

    private static JacksonJsonProvider jackson_json_provider = new JacksonJaxbJsonProvider()
          .configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false)
          .configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
    
    private static ObjectMapper object_mapper = jackson_json_provider.locateMapper(
          Object.class, MediaType.APPLICATION_JSON_TYPE);
    
    private static Client client = ClientBuilder.newClient().register(jackson_json_provider);
    

    Note that the second declaration is not needed just to configure FAIL_ON_UNKNOWN_PROPERTIES or FAIL_ON_EMPTY_BEANS; I use object_mapper for some other reasons.