Gaelyk: возвращен усеченный JSON

#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()
    }
}