2017-04-20 3 views
0

Ich habe das folgende Java-Programm, das eine JSON-Zeichenfolge druckt.verwirrt Senden von JSON als Parameter

System.out.println(objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(objectsToSerialise)); 

Ich habe versucht, die Art des objectsToSerialise mit der unten stehenden Zeile Code zu finden.

System.out.println(objectsToSerialise.getClass().getTypeName()); 

diesem Retour java.util.ArrayList

die Ausgabe, die ich als unten.

[ { 
    "EntityLabels" : [ { 
    "StartToken" : 8, 
    "EntityType" : "Personname", 
    "EndToken" : 16 
    }, { 
    "StartToken" : 24, 
    "EntityType" : "Amount::Spent", 
    "EndToken" : 31 
    } ], 
    "ExampleText" : "What is Frede's limit? ", 
    "SelectedIntentName" : "GiftLimit" 
} ] 

Und ich versuche, das gleiche auf meine API zu posten. Und der Code ist wie folgt.

Und luisUrl ="https://westus.api.cognitive.microsoft.com"

HttpPost httpPost = new HttpPost(luisUrl + "/luis/v1.0/prog/apps/" + appId + "/examples?"); 
httpPost.setHeader("Ocp-Apim-Subscription-Key", subsriptionId); 
StringEntity params = new StringEntity(objectsToSerialise.toString()); 
httpPost.setHeader("Content-Type", "application/json"); 
httpPost.setEntity(params); 
HttpResponse response = httpclient.execute(httpPost); 
     /* Debug Info */ 
System.out.println("---------------Start2----------------"); 
HttpEntity entity = response.getEntity(); 
String responseString = EntityUtils.toString(entity, "UTF-8"); 
System.out.println(responseString); 
System.out.println("---------------End----------------"); 
     /*End Debug Info*/ 
if (response.getStatusLine().getStatusCode() == 201) { 
     success = true; 
     System.out.println("Success"); 
} else { 
     System.out.println("Block"); 
     success = false; 
} 

Und dies immer else Inhalt druckt. d.h. Block. Ich dachte, das könnte ein Problem mit meiner Berufung sein und versuchte dasselbe in Postman. mit den folgenden Details.

URL:https://westus.api.cognitive.microsoft.com/luis/v1.0/prog/apps/ {AppId}/Beispiele?

Methode: Post

Headers:

Content-Type:application/json 
Ocp-Apim-Subscription-Key:{mySubscriptionKey} 

Körper: ** Roh-> JSON ** Inhalt:

[ { 
    "EntityLabels" : [ { 
    "StartToken" : 8, 
    "EntityType" : "Personname", 
    "EndToken" : 16 
    }, { 
    "StartToken" : 24, 
    "EntityType" : "Amount::Spent", 
    "EndToken" : 31 
    } ], 
    "ExampleText" : "What is Frede's limit? ", 
    "SelectedIntentName" : "GiftLimit" 
} ] 

Zu meiner Überraschung wenn ich dies poste, gibt es mirzurück, wo mir mein Java-Code 400 zurückgibt.

Dies ist sehr verwirrend. Bitte lassen Sie mich wissen, wo ich falsch liege und wie ich das beheben kann.

Dank

Antwort

2

objectsToSerialize scheint ein ArrayList, aber in Ihrem Code zu sein, Sie Anfrage Körper mit new StringEntity(objectsToSerialise.toString()); konstruieren. Das heißt, Sie konvertieren Ihre ArrayList nicht in JSON, sondern Sie erhalten nur die Zeichenfolgendarstellung, die normalerweise kein JSON ist.

Try Ändern

new StringEntity(objectsToSerialise.toString()); 

zu

new StringEntity(objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(objectsToSerialise)); 
+0

Dank Mann, arbeitete diese. Danke noch einmal! – user3872094

Verwandte Themen