1

acceptヘッダーが空の場合に返されるデフォルトのコンテンツは何ですか?

以下のコードは、acceptヘッダーが空の場合にapplication / xmlを返します。これは、findAll()にマップされます。acceptヘッダーが空または不明な場合にjax-rsにfindAllAtom()を強制的に実行させる方法はありますか?JbossアプリケーションサーバーとAdbera1.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;
    }
}
4

1 に答える 1

3

Acceptヘッダーのない要求は、クライアントがを指定した場合のように、何かを期待することを意味します*/*。基本的に、Acceptヘッダーが「any」を意味するだけで異なる2つのメソッドがある場合@Produces、JAX-RSフレームワークではメソッドを選択する方法がないため、仕様に従って最初のメソッドを選択します(JSR-3113.7を参照)。 2)

最善の解決策は、正確なタイプのAcceptヘッダーを送信することだと思います。それ以外の場合は、URLごとにメソッドを変えることができます:メソッドに追加 @Path("/xml")@Path("/atom")てください。

于 2011-04-13T11:08:00.233 に答える