休息是不是支持对象的arraylist?
Posted
技术标签:
【中文标题】休息是不是支持对象的arraylist?【英文标题】:Does rest supports arraylist of objects?休息是否支持对象的arraylist? 【发布时间】:2013-07-09 13:31:48 【问题描述】:我有一个类 BookMain,它返回一个对象数组列表。我正在使用 REST 服务获取输出,但出现错误。
这是我的 BookMain 类:
@GET
@Path("/get")
@Produces(MediaType.APPLICATION_XML)
public ArrayList<Object> addObjects()
Book book = new Book();
book.setName("The Book");
book.setAuthor("Author");
BookStore bookstore = new BookStore();
bookstore.setName("The Bookstore");
bookstore.setLocation("UK");
ArrayList<Object> list = new ArrayList<Object>();
list.add(book);
list.add(bookstore);
return list;
这是我得到的错误:
11 Jul, 2013 3:36:52 PM com.sun.jersey.spi.container.ContainerResponse write
SEVERE: A message body writer for Java class java.util.ArrayList, and Java type java.util.ArrayList<java.lang.Object>, and MIME media type application/xml was not found 11 Jul, 2013 3:36:52 PM com.sun.jersey.spi.container.
ContainerResponse write SEVERE: The registered message body writers
compatible with the MIME media type are:application/xml ->
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$App
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$SourceWriter
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$App
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$App
谁能给我一个解决方案?
【问题讨论】:
您的输出页面的内容类型似乎是application/xml
,所以您应该将ArrayList 序列化为xml 发回?
以下内容可以帮助你,A message body writer for Java class java.util.ArrayList…and MIME media type text/xml was not found
【参考方案1】:
您需要将您的实体(Arraylist)包装在 Response 对象下。此外,您的休息方法返回类型应该是响应。以下是您需要做的:
@GET
@Path("/get")
@Produces(MediaType.APPLICATION_XML)
public Response addObjects()
Book book = new Book();
book.setName("Here is the Game");
book.setAuthor("HHH");
BookStore bookstore = new BookStore();
bookstore.setName("Prateek Bookstore");
bookstore.setLocation("Vasanth Nagar");
ArrayList<Object> list = new ArrayList<Object>();
list.add(book);
list.add(bookstore);
return Response.status(200).entity(list).build();
还要在 ResponseList bean 的 getter 顶部添加 @XmlElemen
t
@XmlRootElement
public class ResponseList
private ArrayList<Object> list;
@XMLElement("booksList")
public ArrayList<Object> getList()
return list;
public void setList(ArrayList<Object> list)
this.list = list;
【讨论】:
执行此操作时出现以下错误:方法状态(int)未定义类型响应。有什么想法吗? 从哪个包中导入了 'Response' 类? @pWoz import com.sun.research.ws.wadl.Response; 试试这个:javax.ws.rs.core.Response
@pWoz 这个正在工作,但我仍然遇到我在问题中提到的相同错误,它没有得到解决【参考方案2】:
如下引入一个新类
@XmlRootElement(name = "responseList")
public class ResposeList
private List<Object> list;
public List<Object> getList()
return list;
public void setList(List<Object> list)
this.list = list;
并设置如下列表
@GET
@Path("/get")
@Produces(MediaType.APPLICATION_XML)
public ResposeList addObjects()
Book book = new Book();
book.setName("Here is the Game");
book.setAuthor("HHH");
BookStore bookstore = new BookStore();
bookstore.setName("Prateek Bookstore");
bookstore.setLocation("Vasanth Nagar");
ArrayList<Object> list = new ArrayList<Object>();
list.add(book);
list.add(bookstore);
ResposeList books=new ResposeList();
books.setList(list);
return books;
【讨论】:
嘿伙计,我不想在我的项目中引入一个新类。里面已经有50-60个班了。如果我引入一个新类来实现这一点,我需要再引入大约 20 个类。有没有办法在不引入新类的情况下解决这个问题?? 嘿,我编辑了答案。现在你只能在你返回列表的任何地方使用这个类 我想通了,我们需要使用 XmlSeeAlso 注释在响应列表类中包含子类 感谢您宝贵的时间:) @Prats Ahh 是的,您需要将 classesToBeBound 属性定义为 Jaxb2Marshaller 的列表。无论如何,很高兴它可以工作 :)【参考方案3】:您可以简单地使用 JSONArray 来显示结果。 创建一个 JSONArray 对象并将列表传递给 JSONArray() 构造函数。 然后以字符串格式返回 JSONArray 对象。 将方法的返回类型更改为 String,以下代码将起作用。
块引用
JSONArray a=new JSONArray(list); 返回 a.toString();
【讨论】:
以上是关于休息是不是支持对象的arraylist?的主要内容,如果未能解决你的问题,请参考以下文章
Arrays$ArrayList 的 Object 对象转换为 List<Object> 对象的技巧
何时在 c# 中使用 ArrayList 而不是 array[]?