# Jackson Mapper Module

Nitrite provides a Jackson mapper module to convert Java objects to Document and vice-versa. The module is useful when you don't want to use the EntityConverter interface to map Java objects to Document and vice-versa.

# Adding Jackson Mapper Module

Add the Jackson mapper module to your project:

# Maven

Add the Jackson mapper module dependency to your pom.xml file:

<dependency>
    <groupId>org.dizitart</groupId>
    <artifactId>nitrite-jackson-mapper</artifactId>
</dependency>

# Gradle

Add the Jackson mapper module dependency to your build.gradle file:

dependencies {
    implementation 'org.dizitart:nitrite-jackson-mapper'
}

# Using Jackson Mapper Module

To use Jackson mapper module, you need to load the JacksonMapperModule while opening the database.

Nitrite db = Nitrite.builder()
            .loadModule(new JacksonMapperModule())
            .openOrCreate();

# Using Custom Jackson Modules

If you want to register any custom Jackson module, you can do so by passing the module to JacksonMapperModule constructor.

Nitrite db = Nitrite.builder()
            .loadModule(new JacksonMapperModule(new MyCustomModule()))
            .openOrCreate();

If you want to register multiple modules, you can do so by passing an array of modules to JacksonMapperModule constructor.

Nitrite db = Nitrite.builder()
            .loadModule(new JacksonMapperModule(new MyCustomModule(), new MyAnotherCustomModule()))
            .openOrCreate();

And here is an example of a custom Jackson module.

public class MyCustomModule extends SimpleModule {

    @Override
    public void setupModule(SetupContext context) {
        addSerializer(MyCustomType.class, new MyCustomTypeSerializer());
        addDeserializer(MyCustomType.class, new MyCustomTypeDeserializer());
        super.setupModule(context);
    }
}

# Customizing ObjectMapper

If you want to customize the ObjectMapper used by the Jackson mapper module, you can do so by extending the JacksonMapper class and overriding the getObjectMapper() method.

public class MyCustomJacksonMapper extends JacksonMapper {
    @Override
    public ObjectMapper getObjectMapper() {
        ObjectMapper objectMapper = super.getObjectMapper();
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        return objectMapper;
    }
}

Now, you can use this custom mapper while building the database.

Nitrite db = Nitrite.builder()
            .loadModule(NitriteModule.module(new MyCustomJacksonMapper()))
            .openOrCreate();