球衣:返回字符串列表

2022-09-03 02:27:45

我尝试将泽西岛中的字符串列表作为JSON和XML返回。我以为这将是微不足道的。

我的第一次尝试是写这样的东西

@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Path("/bar")
public List<String> get() {
    return dao.get();
}

我期望一个类似于这样的输出:[“string1”, ..., “stringN]不幸的是,我得到了这个:

com.sun.jersey.api.MessageException: A message body writer for Java class java.util.LinkedList, and Java type java.util.List<java.lang.String>, and MIME media type application/json was not found 

然后我为列表写了一个包装器StringList。

@XmlRootElement
public class StringList {

    private List<String> data;

    public StringList() {
    }

    public StringList(List<String> data) {
        this.data = data;
    }

    public List<String> getData() {
        return data;
    }

    public void setData(List<String> data) {
        this.data = data;
    }
}

并将立面修改为

@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Path("/foo")
public StringList stringlist() {
    return new StringList(sl());
}

这对于项目数超过 1 的列表非常有用。

{"data":["foo","bar"]}

不幸的是,我得到了一个或零个元素的两个未得到的结果

{"data": "just one"} // for one element i would expect {"data": ["just one"]}

null // for no elements i would expect {"data": []}

我做错了什么吗?我该如何解决这个问题?


答案 1

好的,我可以通过搜索样本来修复它

这确实有效,但它只能用于JSON,而不能用于XML。

@GET
@Produces({MediaType.APPLICATION_JSON})
@Path("/get")
public JSONArray get() {;
    return new JSONArray(dao.getStringList());
}

修复了问题,但是否也有通用方法?


答案 2

您可以使用 :javax.ws.rs.core.GenericEntity

@GET
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Path("/foo")
public GenericEntity<List<String>> stringlist()
{
  List<String> list = Arrays.asList("test", "as");

  return new GenericEntity<List<String>>(list) {};
}