Кодирование двоеточия (:) с облачными конечными точками Google, Android Studio

При передаче строкового параметра на AppEngine Dev Server (версия 1.9.15) из сгенерированной клиентской библиотеки (построенной по умолчанию для Android Studio 1.02/Gradle), я обнаружил, что двоеточия в строковых параметрах не кодируются URL. Затем двоеточия интерпретируются как часть структуры запроса сервером dev, который возвращает 404. Я не тестировал это в производственной среде.

Я не знаю, является ли это просто ошибкой в библиотеке конечных точек облаков или dev-сервере, но будет признателен, если у кого-нибудь есть исправление или работа. В ручном режиме URL-кодирование и декодирование параметра работают, но не очень элегантны. Благодарю!

Примеры:

[Api].[method]("param:with:colon").execute().getItems();

выдает запрос:

GET/_ah/api/.../param:with:colon HTTP/1.1

и ответ:

HTTP/1.1 404 Not Found

Строковый параметр без двоеточия работает нормально.

1 ответ

Один из способов решения этой проблемы - превратить этот параметр из параметра path в параметр запроса, указав атрибут явного пути в аннотации @ApiMethod.

В следующем примере кода. По умолчанию параметр "content" ("контент") представляет собой параметр пути. (путь по умолчанию здесь "sayhi/{content}")

@ApiMethod(name = "sayHi", httpMethod = "get")
 public HelloGreeting sayHi(@Named("content") String content) throws Exception {
 return new HelloGreeting(content);
 }

После добавления атрибута "путь" параметр "контент" будет передан и извлечен через/из параметра запроса.

@ApiMethod(name = "sayHi", httpMethod = "get", path="sayhi")
 public HelloGreeting sayHi(@Named("content") String content) throws Exception {
 return new HelloGreeting(content);
 }

licensed under cc by-sa 3.0 with attribution.