我正在将Google Cloud Endpoints用于简单的Android应用程序。但是,我无法将字符串列表作为参数传递给API方法。 如果我使用List作为参数类型,则构建很好,但是我传递的列表中的字符串是连接的,用逗号分隔,并且服务器接收的列表中只有一个条目,这个连接的字符串。例如,如果在客户端中我传递[“a”,“b”,“c”],则服务器接收[“a,b,c”]。 你能用正确的方法帮助我吗?
EDIT1:
在Cloud Endpoint中我有:
@ApiMethod(name = "addGroup")
public void addGroup(@Named("members") List<String> members,
@Named("session") String sessionString) throws ForbiddenException
在Android客户端中:
final List<String> selectedFriends = new ArrayList<>();
selectedFriends.add("A");
selectedFriends.add("B");
selectedFriends.add("C");
ServerApi.getInstance().addGroup(selectedFriends,Session.JSONSession()).execute();
EDIT2: 生成的类自动反编译为:
public class AddGroup extends MyApiRequest<Void> {
private static final String REST_PATH = "addGroup/{members}/{session}";
@Key
private List<String> members;
@Key
private String session;
protected AddGroup(List<String> this$0, String members) {
super(MyApi.this, "POST", "addGroup/{members}/{session}", (Object)null, Void.class);
this.members = (List)Preconditions.checkNotNull(members, "Required parameter members must be specified.");
this.session = (String)Preconditions.checkNotNull(session, "Required parameter session must be specified.");
}
... everything as expected
}
令我困惑的是这个$ 0参数和第二个名为members的参数(看起来会跳过session参数?)。
谢谢!
答案 0 :(得分:1)
我也遇到过这个问题。 尝试了不同的方法来解决问题,但没有任何效果。
向Google AppEngine问题跟踪器报告了此问题: https://code.google.com/p/googleappengine/issues/detail?id=12105
答案 1 :(得分:0)
我不确定为什么注释处理器会以某种方式将this$0
作为路径参数注入。您的API是否真的需要在路径的一部分中包含members
和session
?或者,这些都可以/应该是查询参数(请参阅自动生成的代码以及它是如何在那里注入的)?尝试删除这两者的@Named
注释,这将使它们自动成为查询参数。
答案 2 :(得分:0)
鉴于此方法正在进行修改,它应该是一个POST。我建议不要在这里使用@Named。我会创建一个包含两个参数的AddGroupRequest
类。这样它们作为JSON主体而不是URL参数传递。如上所述,这是一个错误,如果您需要在URL参数中使用List,则可以在App Engine public tracker提交问题。但我建议改用我的解决方案,除非你有充分的理由使用这样的网址。