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) } }
2.33.3.1.3. 使用带有 JacksonDataFormat
的 Quarkus Jackson ObjectMapper
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) } }