我想使用MapStruct将bean类的字段映射到类字典类中。我的源类是标准bean(简化示例):
public class Bean {
private String a;
private String b;
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
}
现在我想将这些字段映射到类似地图的容器中:
public class Dict {
public enum Tag {
A,
B
}
private Map<Tag, String> dict = new HashMap<>();
public String getEntry(Tag tag) {
return dict.get(tag);
}
public void setEntry(Tag tag, String s) {
dict.put(tag, s);
}
}
换句话说,我希望MapStruct能够产生以下内容:
target.setEntry(Dict.Tag.A, source.getA());
target.setEntry(Dict.Tag.B, source.getB());
我在MapStruct documentation中找不到任何相似内容。获取映射源(嵌套源,表达式)有很大的灵活性,但对于目标,我只能看到target = "propertyname"
符号,它没有留出太大的灵活空间。
映射到java.util.Map
的最佳解决方案是什么?
答案 0 :(得分:2)
MapStruct目前不支持这种映射。我们之前考虑过但尚未实现它。你能在我们的issue tracker打开一张票吗?
答案 1 :(得分:0)
您可以在MapStruct映射器中使用Jackson对象映射器将对象转换为Map。
@Mapper
public interface ModelMapper {
ObjectMapper OBJECT_MAPPER = new ObjectMapper();
default HashMap<String, Object> toMap(Object filter) {
TypeFactory typeFactory = OBJECT_MAPPER.getTypeFactory();
return OBJECT_MAPPER.convertValue(filter, typeFactory.constructMapType(Map.class, String.class, Object.class));
}
}