我有一个类Researcher和一个名为researcherList的ArrayList,它包含一个研究人员列表 我想从数据库中获取所有研究人员的信息并将其放入我创建的研究人员列表中,我对客户的回复将是研究人员名单。我已经编写了下面的代码,请尝试查看代码并找到错误。它不起作用。它创造了一个例外。这是例外
SEVERE: A message body writer for Java type, class java.util.ArrayList, and MIME media type, application/xml, was not found
SEVERE: Mapped exception to response: 500 (Internal Server Error) javax.ws.rs.WebApplicationException
@GET
@Path("/researcher/all")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response getAllResearchers() {
//TODO return proper representation object
Researcher res = new Researcher();
List<Researcher> researcherList = new ArrayList<Researcher>();
try {
ResultSet resList = researcher.getAllResearcher();
while (resList.next()) {
res.setId(resList.getInt("id"));
res.setResearcherName(resList.getString("name"));
res.setAge(resList.getInt("age"));
res.setSex(resList.getString("sex"));
res.setCity(resList.getString("city"));
res.setStreet(resList.getString("street"));
res.setTelephone(resList.getString("telephone"));
researcherList.add(res);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
return Response.ok(researcherList).build();
}
答案 0 :(得分:1)
您在循环中始终添加相同的Researcher
对象!你确定它是否合适?
我想在Researcher res = new Researcher();
之后移动while (resList.next()) { .....
会派上用场。
答案 1 :(得分:1)
Response
没有ArrayList
类型的处理程序。
我会将其转换为String
并返回。作为第一个剪辑,您可以尝试:
return Response.ok(researcherList.toString()).build();
此外,您每次都要添加相同的 Researcher
对象。您应该每次循环迭代创建一个新的Researcher对象:
List<Researcher> researcherList = new ArrayList<Researcher>();
try {
Researcher res = new Researcher();
researcherList.add(res);
...
您的最终解决方案可能涉及从列表中构建HTML字符串:
return Response.ok(convertToHtml(researcherList)).build();
...
private static String convertToHtml(String< Researcher > researcherList) {
// some implementation
}