2.53. Jackson
Marshal POJOs to JSON and back using Jackson
2.53.1. What’s inside 复制链接链接已复制到粘贴板!
Refer to the above link for usage and configuration details.
2.53.2. Maven coordinates 复制链接链接已复制到粘贴板!
Create a new project with this extension on code.camel.redhat.com
Or add the coordinates to your existing project:
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jackson</artifactId>
</dependency>
2.53.3. Usage 复制链接链接已复制到粘贴板!
2.53.3.1. Configuring the Jackson ObjectMapper 复制链接链接已复制到粘贴板!
There are a few ways of configuring the ObjectMapper that the JacksonDataFormat uses. These are outlined below.
By default, JacksonDataFormat will create its own ObjectMapper and use the various configuration options on the DataFormat to configure additional Jackson modules, pretty printing and other features.
2.53.3.1.2. Custom ObjectMapper for JacksonDataFormat 复制链接链接已复制到粘贴板!
You can pass a custom ObjectMapper instance to JacksonDataFormat as follows.
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jackson.JacksonDataFormat;
public class Routes extends RouteBuilder {
public void configure() {
ObjectMapper mapper = new ObjectMapper();
JacksonDataFormat dataFormat = new JacksonDataFormat();
dataFormat.setObjectMapper(mapper);
// Use the dataFormat instance in a route definition
from("direct:my-direct").marshal(dataFormat)
}
}
The Quarkus Jackson extension exposes an ObjectMapper CDI bean which can be discovered by the JacksonDataFormat.
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jackson.JacksonDataFormat;
public class Routes extends RouteBuilder {
public void configure() {
JacksonDataFormat dataFormat = new JacksonDataFormat();
// Make JacksonDataFormat discover the Quarkus Jackson `ObjectMapper` from the Camel registry
dataFormat.setAutoDiscoverObjectMapper(true);
// Use the dataFormat instance in a route definition
from("direct:my-direct").marshal(dataFormat)
}
}
If you are using the JSON binding mode in the Camel REST DSL and want to use the Quarkus Jackson ObjectMapper, it can be achieved as follows.
import org.apache.camel.builder.RouteBuilder;
@ApplicationScoped
public class Routes extends RouteBuilder {
public void configure() {
restConfiguration().dataFormatProperty("autoDiscoverObjectMapper", "true");
// REST definition follows...
}
}
You can perform customizations on the Quarkus ObjectMapper with a ObjectMapperCustomizer.
import com.fasterxml.jackson.databind.ObjectMapper;
import io.quarkus.jackson.ObjectMapperCustomizer;
@Singleton
public class RegisterCustomModuleCustomizer implements ObjectMapperCustomizer {
public void customize(ObjectMapper mapper) {
mapper.registerModule(new CustomModule());
}
}
It’s also possible to @Inject the Quarkus ObjectMapper and pass it to the JacksonDataFormat.
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jackson.JacksonDataFormat;
@ApplicationScoped
public class Routes extends RouteBuilder {
@Inject
ObjectMapper mapper;
public void configure() {
JacksonDataFormat dataFormat = new JacksonDataFormat();
dataFormat.setObjectMapper(mapper);
// Use the dataFormat instance in a route definition
from("direct:my-direct").marshal(dataFormat)
}
}