1

次のような 2 つのエンドポイントがあるとします。

@GET
@Path("/blah")
@Produces(MIME_TYPE_1)
public Thing getThing() {
    ....
}

@GET
@Path("/blah")
@Produces(MIME_TYPE_2)
public OtherThing getOtherThing() {
    ....
}

Acceptこれは、クライアントが送信するヘッダーに基づいて呼び出されるメソッドを調停するのに非常にうまく機能します。

私が抱えている問題は、クライアントがAcceptヘッダーを完全に見逃した場合、(何らかの理由で) 2 番目のメソッドが呼び出され、それを最初のメソッドにしたいということです。

さらに複雑な点があります。これは、Swagger ドキュメントに自動的にフィードされるということです。余分な MIME タイプをドキュメントに表示したくないので、(たとえば)*/*最初に受け入れられたタイプに追加したくありません。方法。

(これは Dropwizard と Jersey 1.x を使用していますが、Jersey 2.x に基づいた解決策を聞くことにまだ興味があります。間もなくアップグレードされる可能性があります。)

4

1 に答える 1

2

@Produces注釈で品質係数パラメーターを使用してみてください。

@GET
@Path("/blah")
@Produces("application/json; q=0.6")
public Thing getThing() {
....
}

@GET
@Path("/blah")
@Produces("application/xml; q=1")
public OtherThing getOtherThing() {
....
}

クライアントがリクエストで 'Accept:' ヘッダーを送信しない場合、Web サーバーはgetOtherThing()よりも高い品質係数を持っているため、実行されますgetThing()

免責事項:これは RestEasy で動作しますが、Jersey で動作することは保証できません。

Quality Factor パラメーターはRFC 2616 (14.1)
の一部 です。この機能の詳細については、RestEasy のこちらを参照してください。

于 2015-07-15T23:50:30.290 に答える