接受标头为空或未知时的内容类型 jax-rs
Accept header为空时默认返回的内容是什么?
当接受标头为空时,以下代码返回 application/xml,映射到 findAll()。当接受头为空或未知时,有没有办法强制 jax-rs 执行 findAllAtom() 。 我正在使用restEasy版本2与Jboss应用程序服务器和Adbera 1.1.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;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
没有 Accept 标头的请求意味着客户端期望任何内容,例如它是否指定了
*/*
。基本上,如果您有两个方法仅在@Produces
上有所不同,并且 Accept 标头表示“任何”,则 JAX-RS 框架无法选择该方法,因此根据规范,它选择第一个(参见 JSR-311 3.7.2)我相信最好的解决方案是发送具有确切类型的 Accept 标头。
否则,您可以通过不同的 URL 来使用不同的方法:将
@Path("/xml")
和@Path("/atom")
添加到方法中。Request without Accept header means that client expects anything, like if it has specified
*/*
. Basically if you have two methods that differ only by@Produces
and Accept header means "any", there is no way for a JAX-RS framework how to choose the method, so according to spec it chooses the first one (See JSR-311 3.7.2)I believe that the best solution will be sending Accept header with an exact type.
Otherwise you can differ methods by different URLs: add
@Path("/xml")
and@Path("/atom")
to the methods.