88.6. 매핑 확장
Dozer 구성 요소는 Dozer 매핑 프레임워크에 사용자 지정 변환기로 여러 확장을 구현합니다. 이러한 변환기는 Dozer 자체에서 직접 지원하지 않는 매핑 기능을 구현합니다.
88.6.1. 변수 매핑
변수 매핑을 사용하면 Dozer 구성 내의 변수 정의 값을 소스 필드의 값을 사용하는 대신 target 필드에 매핑할 수 있습니다. 이는 대상 필드에 리터럴 값을 할당할 수 있는 다른 매핑 프레임워크의 상수 매핑과 동일합니다. 변수 매핑을 사용하려면 매핑 구성 내에서 변수를 정의한 다음 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. 사용자 정의 매핑
사용자 지정 매핑을 사용하면 소스 필드가 대상 필드에 매핑되는 방법에 대한 고유한 논리를 정의할 수 있습니다. 이는 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을 사용하여 정의된 변수 값을 해결하려고 할 때 오류가 발생하지 않도록 표현식 내의 모든 속성을 "\"로 이스케이프해야 합니다.