2015-01-02 3 views
4

소스에서 대상까지 도저로 단방향 매핑을 시도하고 있습니다.도저 매핑을 사용하여 객체가있는지도에서 Pojo로 매핑

public class Source { 
    Map<String, String> values; 
    public Source() { 
    } 
    public Source(Map<String, String> values) { 
     this.values = values; 
    } 
    public Map<String, String> getValues() { 
     return values; 
    } 
    public void setValues(Map<String, String> values) { 
     this.values = values; 
    } 
} 

.

public class DozerMapperTest { 
    private DozerMapper mapper = new DozerMapper(); 
    @Test 
    public void testName() throws Exception { 
     String firstname = "Tom"; 
     String lastname = "Hanks"; 
     Map<String, String> input = new HashMap<>(); 
     input.put("firstname", firstname); 
     input.put("lastname", lastname); 
     Destination result = mapper.map(new Source(input)); 
     Assert.assertNotNull(result); 
     Assert.assertEquals(firstname, result.getFirstname()); 
     Assert.assertEquals(lastname, result.getLastname()); 
    } 
} 

내 매핑 클래스는 다음과 같습니다 :

public class DozerMapper { 
    public DozerMapper() { 
     initMapper(); 
    } 
    private DozerBeanMapper mapper; 
    public Destination map(final Source input) { 
     return mapper.map(input, Destination.class); 
    } 
    void initMapper() { 
     BeanMappingBuilder builder = new BeanMappingBuilder() { 
      @Override 
      protected void configure() { 
       mapping(Source.class, Destination.class, TypeMappingOptions.oneWay()) 
         .fields(new FieldDefinition("values.lastname"), "lastname") 
         .fields(new FieldDefinition("values.firstname"), "firstname"); 
      } 
     }; 
     mapper = new DozerBeanMapper(); 
     mapper.addMapping(builder); 
    } 
} 

을 그러나 모든 나는 또한이 매핑을 시도 :-(작동하지 않는 그의 : 여기

public class Destination { 
    private String lastname; 
    private String firstname; 
    public Destination() { 
    } 
    public String getLastname() { 
     return lastname; 
    } 
    public void setLastname(String lastname) { 
     this.lastname = lastname; 
    } 
    public String getFirstname() { 
     return firstname; 
    } 
    public void setFirstname(String firstname) { 
     this.firstname = firstname; 
    } 
} 

내 TestClass에있다

.fields(new FieldDefinition("values").mapKey("lastname"), "lastname") 
.fields(new FieldDefinition("values").mapKey("firstname"), "firstname"); 

나는 봤다, dokumentation과 아무것도 보지 않았다. 아무도 나를 도울 수 없거나 약간의 힌트를 줄 수 있습니까?

+0

발생하는 문제에 대한 자세한 정보와 문제를 해결하기 위해 시도한 사항을 포함하십시오. 감사! –

+0

제 문제는 매핑이 어떻게 필요하며 어떤 도움이되는 문서 나 예제를 찾을 수 없는지 잘 모르는 것입니다. 이 매핑을 사용하는 경우 : 필드 (새 FieldDefinition ("값"). mapKey ("성"), "성"); Destination.lastname에 "{lastname = Hanks, firstname = Tom}"이 포함되어 있으므로 테스트에 실패합니다. Dozer 프레임 워크 디버깅을 이미했는데 그렇게 쉽지 않았기 때문에 실제로 도움이되지 않았습니다. – Phil

답변

0

나는 지금 당장 연구 할 때까지 이것이 가능하지 않다고 생각했기 때문에 질문 해 주셔서 감사합니다!

할 수있는 올바른 방법은 이것이다 :

.fields("values", "firstname") 
.fields("values", "lastname"); 

여기서 중요한 점은 대상 클래스의 "FIRSTNAME"와 "LASTNAME"변수는 소스 클래스 '의 키와 동일해야한다는 것이다 지도. 그렇지 않으면 작동하지 않습니다.