4

@Named が Google Cloud Endpoints で何に使用されているかはわかりません。ドキュメントには次のように記載されています。

このアノテーションは、ここに挿入されるリクエスト内のパラメーターの名前を示します。@Named で注釈が付けられていないパラメータは、リクエスト オブジェクト全体に注入されます。... このサンプルは、@Named の使用を示しています。

 @ApiMethod(
   name = "foos.remove",
   path = "foos/{id}",
   httpMethod = HttpMethod.DELETE)   
public void removeFoo(@Named("id") String id){}

ここで、@Named は、id パラメータのみがリクエストに挿入されることを指定します。

この例で @Named が使用されていない場合、代わりに何が「注入」されますか? 「リクエスト全体」とは?さらに言えば、「注入」とは正確には何ですか?そして、「リクエスト全体」とは何ですか?@Named オブジェクトは常に @Apimethod で定義されたパスの一部である必要がありますか?

ありがとう。

4

1 に答える 1

4

編集:以下の私の答えは実際には間違っていませんが、完全ではありません。基本的に、@Namedアノテーションを追加すると、パラメーターはリクエスト URL の末尾に含まれます。

http://endpointurl?parameter1=xxx&parameter2=yyy

を使用しない場合@Named、パラメータはPOST データ内にインクルード (注入) されます。名前付きパラメーターと名前なしパラメーターを使用してテスト エンドポイントを作成し、Firebug などのリクエスト エクスプローラー ツールを使用すると、非常に明確に確認できます。

明らかに、@Named注釈をサポートするパラメーターの型はごくわずかです (int、long、String、Boolean、およびそれらに対応する配列だと思います)。

以下の元の回答で私が言ったことは誤りではありませんが、完全な回答ではありません...


元の回答: 私の知る限り、@Named の目的は、リクエスト URL 内のパラメーターの名前を示すことです。このようにして、パラメーターはアプリ内で名前を持ち、エンドポイントで公開される他の名前を持つことができます。

GSON の @SerializedName や JDO の @Column とほとんど同じです。これらすべての注釈により、パラメーターに 2 つの異なる名前を付けることができます。1 つはアプリ内で Java 命名規則に従っており、もう 1 つは URL や JSON などの他の規則に従っている名前です...

あなたの例では違いに気付くことはできませんが、次の方法を使用できます。

@ApiMethod(
  name = "remove",
  path = "remove",
  httpMethod = HttpMethod.DELETE) 
public void removeFoo(@Named("my_app_id") String myAppID){}

この場合、URL のパラメーターの名前は次のようになります。

https://mygaeappid.appspot.com/_ah/api/yourapi/v1/remove?my_app_id=1234

いいえ、@Named オブジェクトは、ApiMethod で定義されたパスの一部である必要はありません。

于 2013-03-28T13:57:09.557 に答える