jacksonjsonbjackson-databindquarkusthorntail

How do you adjust json config in Quarkus?


I am attempting to add a mixin to the Jackson's ObjectMapper in a Quarkus project. I have some code that looks likes this:

@Provider
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {

    private final ObjectMapper mapper;

    public ObjectMapperContextResolver() {
        this.mapper = createObjectMapper();
    }

    @Override
    public ObjectMapper getContext(Class<?> type) {
        return mapper;
    }

    private ObjectMapper createObjectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.addMixIn(MyModel.class, MyMixin.class);
        return mapper;
    }
}

This code worked perfectly in a Thorntail project I had. For some reason, Quarkus isn't picking this up, and the object mapper is not affected. Is there something different I have to do with the Quarkus CDI?

Updates

Apparently I was a little confused about the implementation. I should be using the Json-B api. I figured out how to change the configuration for Json-B and posted it below.


Solution

  • Instead of providing an ObjectMapper, you can provide a JsonbConfig so that you can customize serialization/deserialization.

    Here is what I ended up using:

    @Provider
    public class JsonConfig implements ContextResolver<Jsonb> {
    
        @Override
        public Jsonb getContext(Class type) {
            JsonbConfig config = new JsonbConfig();
            config.withPropertyVisibilityStrategy(new IgnoreMethods());
            return JsonbBuilder.create(config);
        }
       }
    
      class IgnoreMethods implements PropertyVisibilityStrategy {
    
        @Override
        public boolean isVisible(Field field) {
            return true;
        }
    
        @Override
        public boolean isVisible(Method method) {
            return false;
        }
    }
    

    This allows you to customize your JsonbConfig. Here, mine specifically prevents access of methods for serialization/deserialization. On Quarkus with Panache, this prevents isPersistent from appearing in your JSON output.