2016-03-31 7 views
0

私はJava 5からJava 1.7に移行するJava開発者です。可能性があることを知らないコードがあります。2つのJavaメソッドが同じ休止エンドポイント

@Path("/myroot") 
@Service 
public class MyServiceClass { 

@POST 
@Produces({ "application/x-protobuf" }) 
@Path("bookid/{bookNumber}") 
public Response findBookByBookId(
    @PathParam("bookNumber") String bookNumber, 
    @QueryParam("searchType") String searchType) { 
    return ... 
} 

@POST 
@Produces("application/json") 
@Path("bookid/{bookNumber}") 
public Response findBookByBookIdAsJson(
    @PathParam("bookNumber") String bookNumber, 
    @QueryParam("searchType") String searchType) { 
    return ...; 
} 

ここでは、同じ残りの終了点を持つ2つの方法があります。唯一の違いは、異なる共振タイプを生成することです。

呼び出し元のアプリケーションは、Javaは、応答タイプに基づいて呼び出すためにどのような方法を知るには十分にスマートであるようにrootURL/bookId/1234に見える呼び出している場合は私の質問はあります。

私は正しいですか?誰かが私の理解を助けてくれますか?

おかげ

+4

要求を行うクライアントは、ヘッダーで期待している応答タイプを指定できる必要があります。 'application/x-protobuf'が期待される応答であれば、サービスは単に呼び出すメソッドを知るかもしれません。私は、予想される応答がヘッダーに指定されていない場合に何が起こるかわからない(多分 'アプリケーション/ json'がデフォルトか何かになります) – ochi

+0

クライアントが受け取るために喜んでどのような要求に指定するために使用するヘッダーが' accept'ですヘッダー – ochi

答えて

1

エンドポイント呼び出しが

curl -v -H "Accept: application/json" --data "param1=value1&param2=value2" http://<Server>/bookid/{bookNumber} 

@POST 
@Produces("application/json") 
@Path("bookid/{bookNumber}") 
public Response findBookByBookIdAsJson(
    @PathParam("bookNumber") String bookNumber, 
    @QueryParam("searchType") String searchType) { 
    return ...; 
} 

そして

curl -v -H "Accept: application/x-protobuf" --data "param1=value1&param2=value2" http://<Server>/bookid/{bookNumber} 

を呼び出すAcceptヘッダによって決定されるであろう残りは

を呼び出します3210
1

には、Java言語のオーバーライドまたはオーバーロードをここで起こっありません。メソッドの名前は異なります。

あなたの質問は、サーブレットコンテナのルーティング要求に関係している、と多くの要因に基づいてルーティングを要求。これらの要因の一つは、リモート要求のacceptヘッダーで指定されたメディアタイプに適合され、@Producesの値とすることができます。

+0

はい。ありがとうございました。私はそれを認識し、ポストスマートなタイトルを変更しました。しかし、たぶんタイトルの変更が見える前にあなたは答えました。ネザーより答えにあまり感謝しません。答えの残りの部分は間違いなく私の疑いを確認します。これはメディアの種類によってどのメソッドが呼び出されるかを決定します。 – Richie

関連する問題