2014-01-30 2 views
0

Dozer과 동일한 이름이지만 소스 및 대상 객체의 유형이 다른 필드간에 사용자 정의 유형 변환을 수행하려고합니다. 나는이 오류 메시지가 나타납니다Dozer 5.4 setCustomConverter가 같은 이름이지만 다른 유형의 필드간에 작동하지 않습니다.

package com; 

import org.dozer.CustomConverter; 
import org.dozer.DozerBeanMapper; 
import org.dozer.DozerConverter; 

import java.util.Arrays; 

public class DozerTest 
{ 
    public static void main(String[] args) 
    { 
     DozerBeanMapper mapper = new DozerBeanMapper(); 

     mapper.setCustomConverters(Arrays.<CustomConverter>asList(new DozerConverter<Version, String>(Version.class, String.class) 
       { 
        @Override public String convertTo(Version version, String versionOrig) 
        { 
         return version.getFullVersion(); 
        } 

        @Override public Version convertFrom(String version, Version versionOrig) 
        { 
         return new Version(version); 
        } 
       })); 

     OldPackage oldPackage = new OldPackage(); 

     oldPackage.setVersion("1.1"); 

     NewPackage newPackage = mapper.map(oldPackage, NewPackage.class); 
     System.out.println(newPackage.getVersion().getFullVersion()); 
    } 

    public static class NewPackage 
    { 
     private Version version; 

     public Version getVersion() 
     { 
      return version; 
     } 

     public void setVersion(Version version) 
     { 
      this.version = version; 
     } 
    } 

    public static class OldPackage 
    { 
     private String version; 

     public String getVersion() 
     { 
      return version; 
     } 

     public void setVersion(String version) 
     { 
      this.version = version; 
     } 
    } 

    private static class Version 
    { 
     private final String fullVersion; 

     private Version(String fullVersion) 
     { 
      this.fullVersion = fullVersion; 
     } 

     public String getFullVersion() 
     { 
      return fullVersion; 
     } 
    } 
} 

:

Exception in thread "main" org.dozer.MappingException: Illegal object type for the method 'setVersion'. 
Expected types: 
com.DozerTest$Version 
Actual types: 
java.lang.String 

누구든지 내가 잘못하고있는 무슨 아이디어가있다 내 의도를 설명 코드를 준비?

static class ConverterImpl extends DozerConverter<Version, String> { 

    ConverterImpl() { 
     super(Version.class, String.class); 
    } 

    @Override public String convertTo(Version version, String versionOrig) 
    { 
     return version.getFullVersion(); 
    } 

    @Override public Version convertFrom(String version, Version versionOrig) 
    { 
     return new Version(version); 
    } 
} 

전체를 : 당신의 BeanMappingBuilder에 참조하기 위해 DozerConverter 구현을 표현하기 위해

BeanMappingBuilder foo = new BeanMappingBuilder() { 

     @Override 
     protected void configure() { 
      mapping(OldPackage.class, NewPackage.class).fields("version", "version", FieldsMappingOptions.customConverter(ConverterImpl.class)); 
     } 
    }; 
mapper.addMapping(foo); 

내가 만든 정적 내부 클래스 :

답변

1

홍익 당신이 매퍼에 매핑을 추가하는 것을 잊었다 생각 클래스 :

import org.dozer.CustomConverter; 
import org.dozer.DozerBeanMapper; 
import org.dozer.DozerConverter; 
import org.dozer.loader.api.BeanMappingBuilder; 
import org.dozer.loader.api.FieldsMappingOptions; 
import java.util.Collections; 

public class DozerTest 
{ 
    public static void main(String[] args) 
    { 
    DozerBeanMapper mapper = new DozerBeanMapper(); 

    mapper.setCustomConverters(Collections.<CustomConverter>singletonList(new ConverterImpl())); 

    BeanMappingBuilder foo = new BeanMappingBuilder() { 

     @Override 
     protected void configure() { 
      mapping(OldPackage.class, NewPackage.class).fields("version", "version", FieldsMappingOptions.customConverter(ConverterImpl.class)); 
     } 
    }; 
    mapper.addMapping(foo); 

    OldPackage oldPackage = new OldPackage(); 

    oldPackage.setVersion("1.1"); 

    NewPackage newPackage = mapper.map(oldPackage, NewPackage.class); 
    System.out.println(newPackage.getVersion().getFullVersion()); 
} 

static class ConverterImpl extends DozerConverter<Version, String> { 

    ConverterImpl() { 
     super(Version.class, String.class); 
    } 

    @Override public String convertTo(Version version, String versionOrig) 
    { 
     return version.getFullVersion(); 
    } 

    @Override public Version convertFrom(String version, Version versionOrig) 
    { 
     return new Version(version); 
    } 
} 

public static class NewPackage 
{ 
    private Version version; 

    public Version getVersion() 
    { 
     return version; 
    } 

    public void setVersion(Version version) 
    { 
     this.version = version; 
    } 
} 

public static class OldPackage 
{ 
    private String version; 

    public String getVersion() 
    { 
     return version; 
    } 

    public void setVersion(String version) 
    { 
     this.version = version; 
    } 
} 

private static class Version 
{ 
    private final String fullVersion; 

    private Version(String fullVersion) 
    { 
     this.fullVersion = fullVersion; 
    } 

    public String getFullVersion() 
    { 
     return fullVersion; 
    } 
} 

}

DozerTest $ OldPackage.version -> $ DozerTest NewPackage.version VALUES -

13 : 56 MAPPED 34.994 [주] DEBUG org.dozer.MappingProcessor이 테스트 클래스 실행시

, 당신은 원하는 출력을 얻을 : 1.1 -> [email protected]b5 MAPID : 1.1

관련 문제