[英]Content type when accept header is empty or unknown jax-rs
当accept标头为空时,返回的默认内容是什么?
当accept标头为空时,以下代码返回application / xml,该标头映射到findAll()。 当accept标头为空或未知时,是否有一种方法可以强制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;
}
}
不带接受标头的请求意味着客户端期望任何东西,就像它已经指定了*/*
。 基本上,如果您有两个仅以@Produces
区别的方法,并且Accept标头表示“ any”,则JAX-RS框架无法选择该方法,因此根据规范,它选择第一个(请参阅JSR-311) 3.7.2)
我相信最好的解决方案是发送具有确切类型的Accept标头。 否则,您可以通过不同的URL使用不同的方法:将@Path("/xml")
和@Path("/atom")
到方法中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.