字符串属性的值太长。它不能超过500个字符

时间:2014-05-29 20:29:10

标签: android google-app-engine google-cloud-endpoints

我只是尝试向端点方法发送一个长字符串参数。其中一个参数是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个字符。

2 个答案:

答案 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作为响应。不像端点方法那样舒服,但它有效。