我只是尝试向端点方法发送一个长字符串参数。其中一个参数是List<String>
,其中包含大量值,如下所示:
105969550886996847196,109334384788152421649,109172191656045871108,... and more
方法本身很简单:
@ApiMethod(name = "getFullObjects")
public MyObject getFullObjects(List<String> ids) {
//body not relevant
}
它抛出了这个:
Error Code: 400
Reason: badRequest
Message: java.lang.IllegalArgumentException: The string property ids has a value that is too long. It cannot exceed 500 characters.
我真的不能在一个参数中传递超过500个字符吗?那太糟糕了......:/
有没有办法超过这个限制或以其他方式传递这些数据?
注意:
此端点方法可以与Android应用程序协作!
注2:
如果真的有端点参数的500个字符的限制,我在GAE的任何文档中找不到,只是想知道实体列表是如何通过的......其中一些肯定会超过序列化为字符串后的500个字符。
答案 0 :(得分:0)
@Xylian,为了绕过限制,您可以将String分解为多个参数,或者使用@ApiTransformer来绕过限制。
您有其他选择:
限制每个字符串中发送的字符数。您可以只发送数字(1,2,10 ......)来代表这些ID(或者它们是什么),而不是发送21个字符长的字符串,然后在服务器上有一个映射表来转换&#34;转换&# 34;这些短ID到长ID。
批量调用API,以避免仅在一次调用中超过配额。
答案 1 :(得分:0)
我认为我找到了最好的解决方案。
但首先......
由于Google App Engine开发者小组被googlers放弃并移到此处,因此我将其作为一个错误发布。这是一个荒谬的限制,只会惹恼严肃的开发者,我只能绕过它。 请在端点方法参数中删除500个字符的无证限制!
然后解决方案......
我决定定义一个新的servlet来处理这个而不是端点方法。这是:
public class LongParamTestServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String paramsString = req.getParameter("params");
resp.getWriter().write("string length: " + paramsString.length());
}
}
然后我用一些非常长的参数向这个servlet提出了请求......
现在响应......
string length: 1664
中提琴!刚刚传递到我的Google App Engine后端参数,长度为1664.我只是将其序列化为json,并返回一个json作为响应。不像端点方法那样舒服,但它有效。