使用Jersey和JAXBElement将Java.util.Map转换为JSON对象

时间:2017-11-14 15:28:46

标签: java json rest jersey javax

我目前正在尝试从泽西岛输出JSON地图。我以这种方式瞄准正常的对象:

map: { key1 : value1, key2: value2 }

然而,泽西选择了一种更令人困惑的方式:

"storage":
  {"entry":[
    {"key":"IRON","value":792},
    {"key":"COPPER","value":2489},
    {"key":"CARDBOARD","value":14536}
    ]
  }
}

我设法使用JAXBElement将一些值映射到自定义地图:

@XmlRootElement
public class MapDTO<K, V> {

    @XmlAnyElement
    private List<JAXBElement<V>> elements = new ArrayList<>();

    public MapDTO(){}

    public MapDTO(Map<K,V> map) {
        map.forEach((k, v) ->
                elements.add(
                        new JAXBElement(new QName(k.toString()), v.getClass(), v))
        );
    }
}

但是由于某种原因,输出结果会产生一个key:Array,其中每个键都显示一个元素的数组:

"storage":{
  "CIRCUITS":[3379992],
  "CARDBOARD":[84838963545],
  "COPPER_CABLE":[1673987]
}

任何人都知道为什么这样做或有没有办法做得更好?

我知道这已被问到before,但是接受的问题似乎是一个非解决方案,因为它无法编译,而其他解决方案似乎不起作用。由于这个问题超过一年,也许有人可以为这个问题带来新的亮点。

0 个答案:

没有答案