2.33. jackson
marshal POJOs 到 JSON,使用 Jackson
2.33.1. 内部内容 复制链接链接已复制到粘贴板!
有关使用和配置详情,请参阅上述链接。
2.33.2. Maven 协调 复制链接链接已复制到粘贴板!
在 code.quarkus.redhat.com 上创建一个具有此扩展名的新项目
或者在现有项目中添加协调:
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jackson</artifactId>
</dependency>
2.33.3. 使用方法 复制链接链接已复制到粘贴板!
2.33.3.1. 配置 Jackson ObjectMapper 复制链接链接已复制到粘贴板!
配置 JacksonDataFormat 使用的 ObjectMapper 有几种方法。下方概述了这些内容。
2.33.3.1.1. 由 JacksonDataFormat在内部创建的 ObjectMapper 复制链接链接已复制到粘贴板!
默认情况下,JacksonDataFormat 将创建自己的 ObjectMapper,并使用 DataFormat 上的各种配置选项来配置额外的 Jackson 模块、用户友善打印和其他功能。
2.33.3.1.2. JacksonDataFormat的自定义 ObjectMapper 复制链接链接已复制到粘贴板!
您可以将自定义 ObjectMapper 实例传递到 JacksonDataFormat,如下所示:
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)
}
}
Quarkus Jackson 扩展会公开一个 ObjectMapper CDI bean,该 Bean 可通过 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)
}
}
如果您在 Camel REST DSL 中使用 JSON 绑定模式,并希望使用 Quarkus Jackson ObjectMapper,可以按照如下所示实现:
import org.apache.camel.builder.RouteBuilder;
@ApplicationScoped
public class Routes extends RouteBuilder {
public void configure() {
restConfiguration().dataFormatProperty("autoDiscoverObjectMapper", "true");
// REST definition follows...
}
}
您可以在带有 ObjectMapperCustomizer 的 Quarkus ObjectMapper 中执行自定义。
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());
}
}
也可以 @Inject Quarkus ObjectMapper,并将它传递到 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)
}
}