我尝试将Jersey中的字符串列表作为JSON和XML返回.我认为这将是微不足道的.
我的第一次尝试是写这样的东西
@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Path("/bar")
public List<String> get() {
return dao.get();
}
Run Code Online (Sandbox Code Playgroud)
我期待一个与此类似的输出:["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
Run Code Online (Sandbox Code Playgroud)
然后我为List编写了一个包装器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;
}
}
Run Code Online (Sandbox Code Playgroud)
并修改了立面
@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Path("/foo")
public StringList stringlist() {
return new StringList(sl());
}
Run Code Online (Sandbox Code Playgroud)
对于包含更多项目的列表而言,这非常有效.
{"data":["foo","bar"]}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我得到了一个或零个元素的两个意外结果
{"data": "just one"} // for one element i would expect {"data": ["just one"]}
null // for no elements i would expect {"data": []}
Run Code Online (Sandbox Code Playgroud)
我做的事情完全错了吗?我怎样才能解决这个问题?
小智 8
好的,我可以通过搜索样本来修复它
这确实有效,但它只能用于JSON而不能用于XML
@GET
@Produces({MediaType.APPLICATION_JSON})
@Path("/get")
public JSONArray get() {;
return new JSONArray(dao.getStringList());
}
Run Code Online (Sandbox Code Playgroud)
修复问题,但是还有一个通用的方法吗?
小智 6
你可以使用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) {};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40428 次 |
| 最近记录: |