#groovy #gaelyk #groovlet
#groovy #gaelyk #groovlet
Вопрос:
Я «передаю» канал json (в некоторых случаях довольно большой), который возвращается из внешней службы, чтобы скрыть api-ключ доступа к клиенту (ключ доступа является единственной доступной системой аутентификации для этой службы).
Я использую Gaelyk и написал этот шаблон:
try {
feed(params.topic)
} catch(Exception e) {
redirect "/failure"
}
def feed(topic) {
URL url = new URL("https://somewhere.com/$topic/<apikey>/feed")
def restResponse = url.get()
if (restResponse.responseCode == 200) {
response.contentType = 'application/json'
out << restResponse.text
}
}
Единственная проблема заключается в том, что «повторный ответ» очень большой, а значение, возвращаемое groovlet, усечено. Итак, я верну json, подобный этому:
[{"item":....},{"item":....},{"item":....},{"ite
Как я могу вернуть полный json без какого-либо усечения?
Комментарии:
1. используете ли вы кэширование выходных данных маршрутов? иногда это вызывает проблему даже с ответами HTML.
2. Я поместил кэш на 2 часа в маршруты, но я уже пробовал без него. Проблема все та же.
Ответ №1:
Что ж, я нашел решение, и проблема была в самом начале (содержимое URL должно быть прочитано как поток). Таким образом, усеченный контент был не выводом, а вводом:
def feed(topic) {
URL url = "https://somewhere.com/$topic/<apikey>/feed".toURL()
def restResponse = url.get()
if (restResponse.responseCode == 200) {
response.contentType = 'application/json'
StringBuffer sb = new StringBuffer()
url.eachLine {
sb << it
}
out << sb.toString()
}
}