2017-02-14 1 views
1

현재 Map<String, String>의 값이 key = value 인 값이 있으며 실제 개체로 확장하려고합니다.MapStruct : java.util.Map에서 Bean으로 매핑?

MapStruct를 사용하여 자동화 할 수 있습니까? 어떻게해야합니까?

는 명확히하기 위해 : 나는 손으로 작성합니다 코드는 다음과 같이 보일 것입니다 :

public MyEntity mapToEntity(final Map<String, String> parameters) { 
    final MyEntity result = new MyEntity(); 
    result.setNote(parameters.get("note")); 
    result.setDate(convertStringToDate(parameters.get("date"))); 
    result.setCustomer(mapIdToCustomer(parameters.get("customerId"))); 
    // ... 
    return result; 
} 
+0

현재 MapStruct에서는 이것이 불가능하다고 생각합니다. 그러나, 그것은 흥미있어 보인다. MapStruct [issue tracker] (https://github.com/mapstruct/mapstruct/issues)에 사람들이 관심이있는 경우 추가 될 수있는 새로운 기능으로 문제를 만들 수 있습니까? – Filip

답변

0

방법 1

MapStruct의 환매 특약이 우리에게 등 Mapping from map 등 유용한 예제를 제공합니다.

되고있는 java.util.Map에서 빈을 매핑하면 같은 것을 보일 것이다

다음 MappingUtil 클래스의 사용을 올바르게지도에서 값을 추출하는 방법을 알아내는 MapStruct 도움

@Mapper(uses = MappingUtil.class) 
public interface SourceTargetMapper { 

    SourceTargetMapper MAPPER = Mappers.getMapper(SourceTargetMapper.class); 

    @Mappings({ 
     @Mapping(source = "map", target = "ip", qualifiedBy = Ip.class), 
     @Mapping(source = "map", target = "server", qualifiedBy = Server.class), 
    }) 
    Target toTarget(Source s); 
} 

공지 사항

public class MappingUtil { 

    @Qualifier 
    @Target(ElementType.METHOD) 
    @Retention(RetentionPolicy.SOURCE) 
    public @interface Ip { 
    } 

    @Qualifier 
    @Target(ElementType.METHOD) 
    @Retention(RetentionPolicy.SOURCE) 
    public static @interface Server { 
    } 

    @Ip 
    public String ip(Map<String, Object> in) { 
     return (String) in.get("ip"); 
    } 

    @Server 
    public String server(Map<String, Object> in) { 
     return (String) in.get("server"); 
    } 
} 

the issue related to this post에 Raild 주석 사항에 따라 방법 2

, MapSt을 사용할 수 있습니다 하지만 성능에

@Mapping(expression = "java(parameters.get(\"name\"))", target = "name") 
public MyEntity mapToEntity(final Map<String, String> parameters); 

없음 메모를 입력 변환이 방법 난이도가 있습니다 만, 문자열 매핑에 대한 간단한 문자열, 그것은 청소기 보는가 : 짧은 방법으로 비슷한 결과를 달성하기 위해 표현을 ruct.