我有以下Jersey方法将HTTP标头包装在Java Set<String>
对象中。
@GET
@Path("header-info")
@Produces(MediaType.TEXT_XML)
public Response getAllHeaders() {
Map<String, List<String>> headerMap = headers.getRequestHeaders();
Set<String> headerNames = headerMap.keySet();
Set<String> values = new HashSet<String>();
for(String header : headerNames){
String headerValue = headerMap.get(header).get(0);
values.add(headerValue);
}
return Response.status(200).entity(values).build();
}
我想以XML或HTML MIME类型返回字符串集。但是当我访问链接时,我收到错误
A message body writer for Java class java.util.HashSet, and Java type class java.util.HashSet, and MIME media type text/xml was not found
我想这是因为Response Set<String> values
中返回的对象没有XML的消息体编写器。如果我使用HTML MIME类型,则会发生同样的错误:
@Produces(MediaType.TEXT_HTML)
我注意到Jersey中有一个MessageBodyWriter接口可以将任何对象写入XML。但是我需要实现这个接口来写入XML。我还需要再次实现它来写入HTML。有没有一种快速简便的方法可以在Jersey中直接将Java对象序列化为XML和HTML?
答案 0 :(得分:0)
首先,尝试将响应内容类型注释更新为:
@Produces(MediaType.APPLICATION_XML).
然后,您需要使用JAXB注释您的实体,以便Jersey知道如何将其编组为XML。尝试创建一个带JAXB注释的包装器,例如:
@XmlRootElement(name="set")
public class JaxbSet<T> implements Set<T> {
protected Set<T> set;
public JaxbSet(Set<T> set){
this.set=set;
}
@XmlElement(name="item")
public Set<T> getSet(){
return this;
}
}
然后将此包装器作为响应实体传递:
return Response.status(200).entity(new JaxbSet<String>(values)).build();