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