2.33. Jacks
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 使用的对象 映射程序。下面概述了它们。
2.33.3.1.1. JacksonDataFormat内部创建的 ObjectMapper 复制链接链接已复制到粘贴板!
默认情况下,JacksonDataFormat 将创建自己的 对象映射 程序,并使用 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,可通过 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 the 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)
}
}