簡體   English   中英

如何使用MapStruct將bean映射到java.util.Map中?

[英]How to map a bean into a java.util.Map using MapStruct?

我想使用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的最佳解決方案是什么?

MapStruct當前不支持這種映射。 我們之前曾考慮過它,但尚未實施它。 您能在我們的問題跟蹤器中打開票證嗎?

您可以在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));
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM