2017-10-04 1 views
0

J'ai une requête POST XML qui fonctionne, jusqu'à ce que je change un champ pour inclure des caractères latins UTF-8 tels que "Î". Je reçois une réponse 400 Bad du service.Les caractères latins rompent la demande XML Post en Java

Ces deux demandes fonctionnent dans l'extension Google Chrome Postman. Je suppose que cela a quelque chose à voir avec la manière dont Java code les caractères ou lit les flux de données. Voici mon code, y compris les bibliothèques pertinentes. Comment peut-on résoudre cela? Merci!

import java.io.BufferedOutputStream; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.net.URLConnection; 


import net.valutec.ws.*; 


public class CardCallbacks extends ValutecWSCallbackHandler { 
    private void sendInfoToMaropost(GiftCard please) throws IOException { 

     URL serverUrl = new URL(TARGET_URL + API_KEY); 
     URLConnection urlConnection = serverUrl.openConnection(); 
     HttpURLConnection hcon = (HttpURLConnection)urlConnection; 
     System.out.println(dont.getBarcode()); 
     try { 


      hcon.setReadTimeout(10000); 
      hcon.setConnectTimeout(15000); 
      hcon.setRequestMethod("POST"); 
      hcon.setRequestProperty("Content-Type", "application/xml"); 
      hcon.setRequestProperty("Accept", "application/xml"); 
      hcon.setDoInput(true); 
      hcon.setDoOutput(true); 

      String body = 

       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + 
       "<record>" + 
         " <orderlineid>fakeorderid</orderlineid>" + 
         " <encoded-barcode>Î</encoded-barcode>" + 
          //the request that doesn't work 
       "</record>";  

      OutputStream output = new BufferedOutputStream(hcon.getOutputStream()); 

      output.write(body.getBytes()); 
      output.flush(); 

      int responseCode = hcon.getResponseCode(); 
      System.out.println(responseCode); 
      if(responseCode == 200) { 

      } 
      BufferedReader in = new BufferedReader(
        new InputStreamReader(hcon.getInputStream())); 

      String inputLine; 
      StringBuffer response = new StringBuffer(); 

      while((inputLine = in.readLine()) != null) { 
       response.append(inputLine); 
      } 



      System.out.println(response); 

      in.close(); 

     } 
     finally { 
      hcon.disconnect(); 
     } 
    } 

EDIT: J'ai trouvé la solution. Cela a permis: Unicode Characters C'était le montage nécessaire:

output.write(body.getBytes("UTF-8")); 

Répondre

0

EDIT: J'ai trouvé la solution. Cela a permis: caractères Unicode Ce fut l'édition nécessaire:

output.write(body.getBytes("UTF-8")); 

L'encodage par défaut pour la classe est « ISO 8859-1 ». Je n'ai pas compris comment obtenir une "réponse" formatée en UTF-8 afin que les caractères incorrects reviennent toujours.