2017-04-20 66 views
0

我有下面的java程序打印json字符串。困惑发送json作为参数

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

我试图用下面的代码行找到objectsToSerialise的类型。

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

这回java.util.ArrayList

,我得到的是如下的输出。

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

而我试图发布到我的API。代码如下。

而且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; 
} 

这总是打印else内容。即Block。我认为这可能是我拨打电话的问题,并在Postman中尝试过。与下面的细节。

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

方法:

头:

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

身体:** RAW-> JSON **内容:

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

令我惊讶的是,当我发布这个,它是返回我201,因为我的Java代码正在返回我400

这很混乱。请让我知道我哪里错了,我该如何解决这个问题。

感谢

回答

2

objectsToSerialize似乎是一个ArrayList,但在你的代码中构建请求体与new StringEntity(objectsToSerialise.toString());。也就是说,您不会将ArrayList转换为JSON,而是通常只获取其不是JSON的字符串表示形式。

尝试改变

new StringEntity(objectsToSerialise.toString()); 

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

感谢的人,这个工作。再次感谢! – user3872094