88.6. 映射扩展
Dozer 组件实施了对 Dozer 映射框架的多个扩展,作为自定义转换器。这些转换器实施映射功能,它们不被 Dozer 本身直接支持。
88.6.1. 变量映射
变量映射允许您将 Dozer 配置中的变量定义值映射到目标字段中,而不使用 source 字段的值。这等同于其他映射框架中的恒定映射,您可以在其中为目标字段分配字面值。要使用变量映射,只需在映射配置中定义变量,然后从 VariableMapper 类映射到您选择的目标字段中:
<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd"> <configuration> <variables> <variable name="CUST_ID">ACME-SALES</variable> </variables> </configuration> <mapping> <class-a>org.apache.camel.component.dozer.VariableMapper</class-a> <class-b>org.example.Order</class-b> <field custom-converter-id="_variableMapping" custom-converter-param="${CUST_ID}"> <a>literal</a> <b>custId</b> </field> </mapping> </mappings>
88.6.2. 自定义映射
自定义映射允许您为 source 字段映射到目标字段定义自己的逻辑。它们的功能类似于 Dozer 客户转换器,其区别有两个显著:
- 您可以在带有自定义映射的单个类中有多个转换器方法。
- 不需要使用自定义映射实现特定于 Dozer 的接口。
通过使用映射配置中的内置 '_customMapping' 转换程序声明自定义映射。这个转换器的参数具有以下语法:
[class-name][,method-name]
方法名称是可选的 - Dozer 组件将搜索与映射所需的输入和输出类型匹配的方法。下面是一个自定义映射和配置示例。
public class CustomMapper { // All customer ids must be wrapped in "[ ]" public Object mapCustomer(String customerId) { return "[" + customerId + "]"; } }
<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd"> <mapping> <class-a>org.example.A</class-a> <class-b>org.example.B</class-b> <field custom-converter-id="_customMapping" custom-converter-param="org.example.CustomMapper,mapCustomer"> <a>header.customerNum</a> <b>custId</b> </field> </mapping> </mappings>
88.6.3. 表达式映射
表达式映射允许您使用 Camel 的强大 语言 功能来评估表达式,并将结果分配给映射中的目标字段。Camel 支持的任何语言都可以在表达式映射中使用。表达式的基本示例包括将 Camel 消息标头或交换属性映射到目标字段或将多个源字段串联到目标字段中。映射表达式的语法是:
[language]:[expression]
将消息标头映射到目标字段的示例:
<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd"> <mapping> <class-a>org.apache.camel.component.dozer.ExpressionMapper</class-a> <class-b>org.example.B</class-b> <field custom-converter-id="_expressionMapping" custom-converter-param="simple:\${header.customerNumber}"> <a>expression</a> <b>custId</b> </field> </mapping> </mappings>
请注意,您的表达式中的任何属性都必须使用 "\" 进行转义,以防止 Dozer 尝试解析使用 EL 定义的变量值时出现错误。