我不清楚 @Named 在 Google Cloud Endpoints 中的用途。文档说:
如果在这个例子中没有使用@Named,那么“注入(inject)”是什么?与“整个请求”?就此而言,究竟什么是“注入(inject)”?什么是“整个请求”? @Named 对象是否总是必须是@Apimethod 中定义的路径的一部分?
谢谢。
最佳答案
编辑 :虽然我下面的回答并没有错,但它根本不完整。基本上当你添加 @Named
注释时,参数将包含在请求 URL 的末尾:
http://endpointurl?parameter1=xxx¶meter2=yyy
如果您不使用
@Named
,则该参数将包含(注入(inject))在 POST 数据中。通过使用一些命名参数和一些未命名参数创建测试端点,并使用一些请求浏览器工具(例如 Firebug),您可以非常清楚地看到它。显然支持
@Named
注释的参数类型只有少数(我认为是 int、long、String、Boolean 及其对应的数组)。我在下面的原始答案中所说的不是错误的,但不是完整的答案......
原答案 : 据我了解,@Named 的目的是在请求 URL 中指明参数的名称。这样,参数可以在您的应用程序中具有一个名称,并在端点中公开其他名称。
它与 GSON 中的 @SerializedName 或 JDO 中的 @Column 几乎相同。所有这些注释都允许您的参数有 2 个不同的名称,一个在您的应用程序中,遵循 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 中定义的路径的一部分。
关于google-cloud-endpoints - @Named 在 Google Cloud Endpoints 中的用途,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15680799/