Methode 1
Die MapStruct Repo gibt uns nützliche Beispiele wie Mapping from map: Der Code, den ich von Hand schreiben würde wie folgt aussehen würde.
von einem java.util.Map eine Bohne Mapping würde in etwa so aussehen:
@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);
}
Beachten Sie die Verwendung der MappingUtil Klasse MapStruct herauszufinden, zu helfen, den richtigen Umgang mit Werten aus der Karte extrahieren:
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");
}
}
Methode 2
per Raild Kommentar zu the issue related to this post ist es möglich, MapSt zu verwenden ruct Ausdrücke ähnliche Ergebnisse in kürzerem Weg zu erreichen:
@Mapping(expression = "java(parameters.get(\"name\"))", target = "name")
public MyEntity mapToEntity(final Map<String, String> parameters);
Kein Hinweis auf Leistung kann allerdings und Typumwandlung auf diese Weise schwieriger sein, aber für eine einfache String-String-Mapping, sieht es sauberer.
Ich denke, dass dies derzeit in MapStruct nicht möglich ist. Es sieht jedoch interessant aus. Können Sie ein Problem im MapStruct [Issue Tracker] (https://github.com/mapstruct/mapstruct/issues) als neues Feature erstellen, das möglicherweise hinzugefügt wird, wenn die Leute daran interessiert sind. – Filip