2009-05-13 2 views
6

도저가있는 속성에 상수 값을 넣는 방법을 아는 사람이 있습니까? dozer의 문서에서 그걸 보지 못했습니다.도저 매핑의 상수

답변

3

BeanA에서 BeanB로 매핑 할 때마다 Dozer가 항상 BeanB.someField에 상수를 채우 길 원한다면?

이 매핑에 custom converter을 등록 할 수 있습니다.

+0

네, 그게 내가 원하는 것입니다. 사용자 지정 변환기없이 직접 할 수 있는지 궁금합니다. –

+0

고맙습니다. 고맙습니다. –

+0

Dozer를 호출 할 때 유일한 변환 방법은 사용자 지정 변환을 사용하거나 수동으로 수행하는 것입니다. Dozer는 실제로 하나의 bean에서 다른 bean으로의 매핑만을 처리하며 다른 논리를 삽입 할 여지는 많지 않습니다 (의미가 없기 때문에). –

2

이벤트 메커니즘을 이용하는 것은 어떻습니까?

그래서 청취자의 mappingFinished()에 값 설정을 할 청취자를 등록 할 수 있습니다. 자세한 내용은 dozer doc on events에게 문의하십시오. 물론 당신은 if ... instanceof 어떤 종류의 설정 코드를 지켜야 할 것입니다.

+0

'preWritingDestinationValue'에 내 훅을 넣었음에도 불구하고이 값은 이미 매핑되어있는 값을 덮어 쓰지 않고 기본값으로 사용됩니다. – tzrlk

1

최근 도저 빌드로이 작업을보다 쉽게 ​​수행 할 수 있습니다. 사용자 지정 변환기 을 모두 지정할 수 있으며 지정된 필드 매핑에 대해 해당 변환기에 대한 매개 변수를 지정할 수 있습니다. 입력 매개 변수를 취하여 그 시간의 100 % 출력 필드에 넣는 단일 'ConstantConverter'를 만드는 것은 간단합니다.

+1

실제로 사용자 지정 변환기에서는 쉽지 않습니다. 먼저 필드를 포함하는 전체 클래스에 대한 변환기를 작성해야합니다 (처음에는 도저 사용 목적을 무효화). 또는 몽타주를 사용하여 변환기를 단일 필드에 연결하는 경우 (원 필드는 하나에 만 존재합니다. 수업의). 어떤 경우에는 좋은 접근 방식이 될 수 있습니다 (객체 구조에 따라 다름). – Lajcik

0

이것은 ModelMapper 꽤 간단하다

ModelMapper modelMapper = new ModelMapper(); 

modelMapper.addMappings(new PropertyMap<SourceClass, DestClass>() { 
    protected void configure() { 
    map().setSomeProperty(someConstant); 
    } 
}); 

이 예는 DestClass.someProperty-someConstant 매핑합니다.

당신은에서 더 많은 예제와 문서에서 확인할 수 있습니다 : http://modelmapper.org

0

하나의 가능한 구현은 다음과 같습니다

public class ConstantsCustomConvertor implements ConfigurableCustomConverter{ 

    private String pararamter; 
    @Override 
    public Object convert(Object existingDestinationFieldValue, Object sourceFieldValue, Class<?> destinationClass, Class<?> sourceClass) {  
     return pararamter; 
    } 

    @Override 
    public void setParameter(String parameter) { 
     this.pararamter = parameter; 

    } 
} 

예 :이 사용자 정의 변환기는

<field custom-converter-param="CONTANT_VALUE" custom-converter="org.yourcompany.ConstantsCustomConvertor"> 
    <a>a-class-dummyfieldname</a> 
    <b>b-class-fieldname</b> 
</field>  

는 그 B-클래스를 가정 -fieldname은 String 유형입니다.