找到用于映射属性的模糊映射方法(java.util.Map和java.util.Object)

时间:2019-08-05 13:46:03

标签: java class object dto mapstruct

我正在使用mapstruct从一个DTO映射到另一个。我有多个默认方法,但是其中两个具有返回值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) .lang.Object toObject(java.lang.String文本)。

1 个答案:

答案 0 :(得分:0)

这两个方法都限定对象和映射。但是,您可以选择要使用的正确结果类型。看看@BeanMapping#resultType