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"));