方法1
的MapStruct回購爲我們提供了有用的例子如Mapping from map。
從java.util.Map映射豆會看起來像:
@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);
}
注意使用MappingUtil類的幫助MapStruct搞清楚如何正確地從地圖中提取值:
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");
}
}
方法2
按Raild評論the issue related to this post,可以使用MapSt構作表達式實現在更短的方式類似的結果:
@Mapping(expression = "java(parameters.get(\"name\"))", target = "name")
public MyEntity mapToEntity(final Map<String, String> parameters);
沒有注意到對性能雖然和類型轉換可能是這樣的麻煩,但一個簡單的串來串映射,它看起來更清潔。
我認爲目前這在MapStruct中是不可能的。但是,它看起來很有趣。你可以在MapStruct [問題跟蹤器](https://github.com/mapstruct/mapstruct/issues)中創建一個問題作爲一個新功能,如果人們對它感興趣,它可能會被添加。 – Filip