以json格式从rest服务返回Map

时间:2016-05-23 06:45:41

标签: java json rest jersey

我有一个返回Map<String, ArrayList<EntityClass>>的方法。代码如下Definition类:

public Map<String, ArrayList<EntityClass>> webMethod1(){
    ArrayList<EntityClass> arr = new ArrayList<>();
    for (int i=0;i<5;i++){
        arr.add(new EntityClass(i, String.valueOf(i)));
    }
    Map<String, ArrayList<EntityClass>> map = new HashMap<>();
    map.put("Entity", arr);
}

此外,Web服务调用如下:

@GET
@Path("/m1")
@Produces(MediaType.APPLICATION_JSON)
public Map<String, ArrayList<EntityClass>> m1(){
    return new Definition().webMethod1();
}

但我正在控制台上关注:

MessageBodyWriter not found for media type=application/json, type=class java.util.HashMap, genericType=class java.util.HashMap.

HTTP 500为错误。

如何解决此错误

1 个答案:

答案 0 :(得分:1)

可能你应该考虑使用像GSON这样的简单编组库。 我最终得到了这段代码:

@GET
@Path("/m1")
@Produces(MediaType.APPLICATION_JSON)
public String webMethod1(){
    ArrayList<EntityClass> arr = new ArrayList<>();
    for (int i=0;i<5;i++){
        arr.add(new EntityClass(i, "\"-'"+String.valueOf(i)));
    }
    Map<String, List<EntityClass>> map = new HashMap<>();
    map.put("Entity", arr);

    GsonBuilder builder = new GsonBuilder();
    Gson gson = builder.create();

    return gson.toJson(map);
}

这对我来说非常好,并且在编写MessageBodyWriter时不会增加很多复杂性,这对于简单的POJO类和结构来说毫无意义。