2015-04-16 4 views
5

Ich habe ein Problem mit HTTPBuilder in Grails.HTTPBuilder kodierend UTF-8 in Grails

Der Code ist so etwas.

def http = new HTTPBuilder("theURL") 

http.request(method, ContentType.JSON) { 
    uri.path = "theURI" 

    headers.'Authorization' = "OAuth $accessToken" 
    headers.'Accept' = "application/json" 
    headers.'content-type' = "application/json;charset=utf-8" 

    response.success = { resp, json -> 
     result = json 
    } 
} 

return result 

Jetzt ist die Antwort ein JSON mit "Cobro N 1234", aber ich brauche "Cobro Nº 1234"

Ich habe versucht, dies mit curl und die Antwort ist in Ordnung "Cobro Nº 1234", das ließ mich denken, dass das Problem der HTTPBuilder und nicht meine API ist, wer die Anfrage beantwortet.

Ich denke, dass es ein Problem mit der Antwort-Codierung ist.

+0

Der Endpunkt ist Sie treffen? – Opal

+0

Ist eine API in Salesforce mit Authentifizierung (aber ich lösche diesen Teil des Codes im Snippet) – dimartiro

+0

Haben Sie versucht, 'content-type 'als' application/json; charset = utf-8' zu setzen? – dmahapatro

Antwort

0

Try this:

headers.'content-type' = "application/JSON;charset=UTF-8" //capitalized 

Entweder dies versuchen:

@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8") 
+0

das Problem geht weiter – dimartiro

0

Versuchen Sie, diese Zugabe nach dem 'http' Erklärung:

http.encoderRegistry = new EncoderRegistry(charset: 'utf-8') 
1
http.encoders.charset = Charsets.UTF_8 
+0

Während dieses Code-Snippet die Frage lösen kann, [einschließlich einer Erklärung] (https://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) wirklich hilft, die Qualität Ihrer Post zu verbessern. Denken Sie daran, dass Sie die Frage für die Leser in Zukunft beantworten, und diese Leute vielleicht nicht wissen, Die Gründe für Ihren Code-Vorschlag Bitte versuchen Sie auch nicht, Ihren Code mit Explanator zu überladen y Kommentare, dies reduziert die Lesbarkeit sowohl des Codes als auch der Erläuterungen! –

0

konnte ich nicht folgen, wenn der Inhalt, den Sie senden, mit UTF-8 codiert werden muss, oder wenn der Inhalt, den Sie erhalten, mit UTF-8 gelesen werden muss.

Ich hatte ein Problem Senden von Inhalten mit UTF-8, und das ist, was ich tat.

http.request(Method.PUT) { request -> 
    // set headers here 
    request.entity = new StringEntity(json.toString(), "UTF-8") 
} 

Ich Umwandlung eines net.sf.json.JSONObject einen String, um es zu passieren entlang wie der Körper des PUT Anruf. Ich verwende StringEntity, und zuvor habe ich nicht die Codierung auf die StringEntity festgelegt, aber es gibt einen Konstruktor, der eine Codierung nimmt. Jetzt, wo ich "UTF-8" eingestellt habe, funktioniert es. public