Тип содержимого, когда заголовок подтверждения пуст или неизвестен - PullRequest
1 голос
/ 13 апреля 2011

Какое содержимое по умолчанию возвращается, когда заголовок подтверждения пуст?

Приведенный ниже код возвращает application / xml, когда заголовок accept пуст, что соответствует findAll (). Есть ли способ заставить jax-rs выполнить findAllAtom (), когда заголовок accept пуст или неизвестен. Я использую 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;
    }
}

1 Ответ

3 голосов
/ 13 апреля 2011

Запрос без заголовка Accept означает, что клиент ожидает чего-либо, например, если он указал */*. В основном, если у вас есть два метода, которые отличаются только на @Produces, а заголовок Accept означает «любой», для среды JAX-RS нет способа выбрать метод, поэтому в соответствии со спецификацией он выбирает первый (см. JSR- 311 3.7.2)

Я считаю, что лучшим решением будет отправка заголовка Accept с точным типом. В противном случае вы можете различать методы по разным URL: добавьте @Path("/xml") и @Path("/atom") к методам.

...