2014-07-02 2 views
0

Je "passe" un flux json (dans certains cas assez important) renvoyé par un service externe, pour masquer une api-clé d'accès au client (la clé d'accès est la seule authentification disponible système pour ce service).Gaelyk: renvoyé tronqué JSON

J'utilise Gaelyk et j'ai écrit ce groovlet:

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 
    } 
} 

Le seul problème est que le « restResponse » est très grand et la valeur retournée par la groovlet est tronquée. Je vais donc revenir un JSON comme ceci:

[{"item":....},{"item":....},{"item":....},{"ite 

Comment puis-je retourner le JSON complet sans troncature?

+0

utilisez-vous les routes de mise en cache de sortie? cela provoque parfois le problème, même avec des réponses HTML. – musketyr

+0

Je met une cache de 2 heures dans les routes mais j'ai déjà essayé sans. Le problème est toujours le même. – Randomize

Répondre

0

Eh bien, j'ai trouvé la solution et le problème était au début (le contenu de l'URL doit être lu comme un flux). Donc le contenu tronqué n'était pas la sortie mais l'entrée:

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