Erreur HTTP 400 Bad Request lors de la Publication des données JSON sur HttpURLConnection
J'ai ce code ci-dessous qui essaie de publier des données JSON après avoir réussi à s'authentifier via Oauth2.0, le code ressemble à ceci:
try {
URL url = new URL ("https://test.api.neteller.com/v1/oauth2/token?grant_type=client_credentials");
String test = "QUFBQlNhVlFoUjhlTVhPQjowLm9aV3g2Rkhwd1dIQUZnXzRaMDZwOUoyRWtzaXVHMHEzd2xrVFF4MkRVM28uN0FzUDE4cmZXU0dxVDdqWE1NUGhzSFY4cHU0";
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setRequestProperty ("Authorization", "Basic " + test);
String accessToken = "";
[... get the access token ...]
String urlnew = "https://test.api.neteller.com/v1/transferIn";
URL obj = new URL(urlnew);
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
//add request header
con.setRequestMethod("POST");
con.setDoOutput(true);
con.setRequestProperty ("Authorization", "Bearer " + accessToken);
con.setRequestProperty("Content-Type", "application/json");
//Send post request
JSONObject obj2 = new JSONObject();
obj2.put("paymentMethod", "");
obj2.put("type", "neteller");
obj2.put("value", "[email protected]");
obj2.put("transaction", "");
obj2.put("merchantRefId", "20140203122501");
obj2.put("amount", (5000));
obj2.put("currency", "USD");
obj2.put("verificationCode", "411392");
System.out.print(obj2);
int responseCode = con.getResponseCode();
System.out.println("Response Code : " + responseCode);
[... parse response ...]
} catch(Exception e) {
e.printStackTrace();
}
J'obtiens cette erreur quand je lance le code ci-dessus:
java.io.IOException: Server returned HTTP response code: 400 for URL: https://test.api.neteller.com/v1/transferIn
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.net.www.protocol.http.HttpURLConnection.getChainedException(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
at example.demo.main(demo.java:71)
Caused by: java.io.IOException: Server returned HTTP response code: 400 for URL: https://test.api.neteller.com/v1/transferIn
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.HttpURLConnection.getResponseCode(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source)
at example.demo.main(demo.java:65)
De l'état d'erreur 400 je sais que le post de données JSON n'est pas valide. Je soupçonne peut-être dans la structure, car, selon la documentation, il devrait ressembler à ceci:
{
"paymentMethod": {
"type": "neteller",
"value": "[email protected]"
},
"transaction": {
"merchantRefId": "20140203122501",
"amount": 5000,
"currency": "USD"
},
"verificationCode": "234124"
}
Alors, comment puis-je modifier le paramètre JSON afin qu'il puisse suivre la structure de la documentation?
paymentMethod
ettransaction
devrait êtreJSONObject
s eux-mêmes.- aussi, vous n'écrivez pas votre json n'importe où d'autre que de la console....
- Que voulez-vous dire qu'ils devraient être JSONObject eux-mêmes? aussi, où dois-je écrire? merci pour votre réponse
Vous devez vous connecter pour publier un commentaire.
Pour le schéma de données, comme ceci:
De l'écriture dans le outputStream de la connexion (la charge utile de la POSTE):
ci-dessus, avant la lecture de la responseCode.