【问题标题】:Ambiguous mapping methods found for mapping property ( java.util.Map and java.util.Object)映射属性(java.util.Map 和 java.util.Object)的映射方法不明确
【发布时间】:2019-08-05 13:46:03
【问题描述】:

我正在使用 mapstruct 从一个 DTO 映射到另一个。我有多个默认方法,但其中 2 个返回值为 String 并且使用与输入参数相同的类给我“使用 java Mapstruct 的模糊映射方法”错误。


public class Action implements Serializable {

    [...]

    private String statusHistory;

    [...]

    private String propertiesOriginal;
    private String propertiesEdited;

    // Setter, Getter, ecc..
}

public class ActionDTO implements Serializable {

    ...
    private Map<String, Integer> statusHistory  = new HashMap<>();

    ...
    private Object propertiesOriginal;
    private Object propertiesEdited;

    // Setter, Getter, ecc..
}

@Mapper(componentModel = "spring", uses = {})
public interface ActionMapper extends EntityMapper<ActionDTO, Action> {

    default Map toMap(String text) throws IOException {
        Map map = new HashMap();
        try{
            map = new ObjectMapper().readValue(text, new TypeReference<Map<String, Integer>>(){});
        } catch (IOException e){
            e.printStackTrace();
        }
        return map;
    }

    default String fromMap(Map map){
        return new JSONObject(map).toString();
    }

[...]

    default Object toObject(String text) throws IOException {
        return new ObjectMapper().readValue(text, Object.class);
    }

    default String fromObject(Object object) throws IOException {
        return new ObjectMapper().convertValue(object, String.class);
    }
[...]
}

错误:(16, 7) java: 找到将属性“java.lang.String statusHistory”映射到 java.util.Map 的不明确映射方法:java.util.Map toMap(java.lang.String text), java .lang.Object toObject(java.lang.String text)。

【问题讨论】:

    标签: java class object dto mapstruct


    【解决方案1】:

    这两种方法都限定了 Object 和 Map。但是,您可以选择要使用的正确结果类型。看看@BeanMapping#resultType

    【讨论】:

    • 它总是给我同样的错误:Error:(16, 7) java: Ambiguous mapping methods found for mapping property "java.lang.String statusHistory" to java.util .Map: java.util.Map toMap(java.lang.String text), java.lang.Object toObject(java.lang.String text)。 问题是所有对象都是"Object",也是Map。如何让 mapstruct 理解这是 Object.class 而不是它的子类,而其他都是子类
    • 我下周去看看。它应该选择最合适的并忽略对象。同时,您可以使用限定符强制选择正确的方法。
    • 这是一个已知问题。见github.com/mapstruct/mapstruct/issues/1216。为了解决这个问题,@Sjaak 的答案目前是正确的
    猜你喜欢
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 2011-03-13
    • 2017-07-23
    • 2016-02-24
    • 2015-07-09
    • 2018-08-24
    • 2012-07-22
    相关资源
    最近更新 更多