accept header为空时返回的默认内容是什么?
当accept header为空并映射到findAll()时,下面的代码返回application / xml。当accept header为空或未知时,有没有办法强制jax-rs执行findAllAtom()。 我正在使用带有Jboss Application服务器和Adbera 1.1.2的restEasy版本2
@Stateless
@Path("quotes")
public class QuoteFacadeREST extends AbstractFacade<Quote> {
@PersistenceContext(unitName = "RestFullDayTraderPU")
private EntityManager em;
public QuoteFacadeREST() {
super(Quote.class);
}
@GET
@Override
@Produces({"application/xml", "application/json"})
public List<Quote> findAll() {
return super.findAll();
}
@GET
@Override
@Produces({"application/atom+xml"})
@GET
public Feed findAllAtom() throws Exception {
Factory factory = abdera.getFactory();
Feed feed = abdera.getFactory().newFeed();
feed.setId("tag:example.org,2007:/foo");
feed.setTitle("Feed Title");
feed.setSubtitle("Feed subtitle");
feed.setUpdated(new Date());
feed.addAuthor("My Name");
feed.addLink("http://example.com");
feed.addLink("http://example.com","self");
Entry entry = feed.addEntry();
entry.setId("tag:example.org,2007:/foo/entries/2");
entry.setTitle("Entry title 22 44");
entry.setUpdated(new Date());
entry.setPublished(new Date());
entry.setSummary("Feed Summary");
entry.setContent("One line content");
return feed;
}
@Override
protected EntityManager getEntityManager() {
return em;
}
}
答案 0 :(得分:3)
没有Accept标头的请求意味着客户端需要任何内容,例如它是否指定了*/*
。基本上如果你有两个方法只有@Produces
不同而Accept头的意思是“任意”,那么JAX-RS框架就无法选择方法,所以根据规范选择第一个方法(见JSR-311 3.7.2)
我相信最好的解决方案是发送具有确切类型的Accept标头。
否则,您可以通过不同的网址区分不同的方法:向方法添加@Path("/xml")
和@Path("/atom")
。