2

我想使用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;
    }
}

现在我想将这些字段映射到类似 Map 的容器中:

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文档中找不到类似的东西。获取映射源(嵌套源、表达式)有很大的灵活性,但对于目标,我只能看到target = "propertyname"没有太多灵活性空间的符号。

映射到的最佳解决方案是java.util.Map什么?

4

2 回答 2

2

MapStruct 目前不支持这种映射。我们之前考虑过,但还没有实现它。你能在我们的问题跟踪器中开一张票吗?

于 2016-01-02T10:20:24.303 回答
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));
  }
}
于 2018-04-19T05:14:38.043 回答