在Google Cloud Endpoints中@Named的用途

时间:2013-03-28 11:39:06

标签: google-cloud-endpoints

我不清楚@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中定义的路径的一部分?

感谢。

1 个答案:

答案 0 :(得分:4)

编辑:虽然我的答案不是真的错,但根本不完整。基本上,当您添加@Named注释时,参数将包含在请求URL的末尾:

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

如果您不使用@Named,则该参数将包含在POST数据中(注入)。您可以通过创建一个带有一些命名参数和一些未命名参数的测试端点,并使用一些请求资源管理器工具(如Firebug)来清楚地看到它。

显然,支持@Named注释的参数类型只有少数(我认为是int,long,String,Boolean及其对应的数组)。

我在下面的原始答案中所说的并非虚假,但不是一个完整的答案......


原始回答:据我了解,@ Nagamed的目的是在请求网址中指明参数的名称。这样,参数可以在您的应用中具有名称,并在端点中显示其他名称。

与GSON中的@SerializedName或JDO中的@Column几乎相同。所有这些注释允许您的参数有两个不同的名称,一个在您的应用程序中,遵循Java命名约定,另一个名称遵循其他约定,如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中定义的路径的一部分。