字符串属性的值太长.不超过500个字符



我只是试图发送一个长字符串参数到端点方法。其中一个参数是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的任何文档中找到,只是想知道如何有实体可通过的列表…

@Xylian,要绕过限制,您可以将字符串分解为多个参数或使用@ApiTransformer来绕过限制。

其他选项:

  • 限制每个字符串中发送的字符数。比起发送21个字符长的字符串,您可以只发送数字(1,2,10…)来表示这些ID(或任何它们是),然后在服务器上有一个映射表来"转换"这些短ID到长ID。

  • 批量调用API,避免在一次调用中超过配额。

我想我找到了最好的解决方案。

但首先…

由于Google App Engine开发者小组被Google人抛弃并搬到了这里,我正式将其作为bug发布。这是一个荒谬的限制,只会让严肃的开发人员感到恼火,我必须绕过它。请删除未记录的端点方法参数中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

紫百合!刚刚传递到我的谷歌应用引擎后端参数长度1664。我将把它序列化为json,并在响应中返回json。不像端点方法那么舒适,但它可以工作。

最新更新