jmapper-framework / jmapper-core

Elegance, high performance and robustness all in one java bean mapper
http://jmapper-framework.github.io/jmapper-core
Apache License 2.0
227 stars 41 forks source link

Mapping to Map #74

Open khirschmann opened 6 years ago

khirschmann commented 6 years ago

When mapping multiple fields to a map AND one of those fields is null all members listed before this field in class are lost (map is set to null).

`public class Source {

@JMap("map")
private String id;
@JMap("map")
private Integer quantity;
@JMap("map")
private Date purchase;

public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
public Integer getQuantity() {
    return quantity;
}
public void setQuantity(Integer quantity) {
    this.quantity = quantity;
}
public Date getPurchase() {
    return purchase;
}
public void setPurchase(Date purchase) {
    this.purchase = purchase;
}

@JMapConversion(from = { "id", "quantity", "purchase" }, to = "map", type = Type.DYNAMIC)
public static String toAttributeConversion() {
    return " ${destination} = (${destination} != null ? ${destination} : new java.util.HashMap());"         
            + " System.out.println(\"Converting: \" + \"${source.name}\"); "                
            + " ${destination}.put(\"${source.name}\", ${source}); "
            + " return ${destination}; ";
}

}

public class Destination {

private HashMap<String, Object> map;

public HashMap<String, Object> getMap() {
    return map;
}

public void setMap(HashMap<String, Object> map) {
    this.map = map;
}

}

public class Main {

public static void main(String[] args) {
    Source s = new Source();
    s.setId("Id");
    s.setPurchase(new Date());

    JMapper<Destination, Source> mapper = new JMapper<Destination, Source>(Destination.class, Source.class);
    Destination d = mapper.getDestination(s);
    System.out.println(d.getMap().toString());

}

} ` Output: Converting: id Converting: purchase {purchase=Thu Oct 12 14:04:53 CEST 2017}

Perhaps that is the wrong way to do it?

Thx for your help. Kevin

avurro commented 6 years ago

Hi @khirschmann,

I need to do a test, let you know as soon as possible

mdowsian commented 9 months ago

Hi @khirschmann,

I need to do a test, let you know as soon as possible

Have you done this test?