我在下面的java程序中打印了一个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} /实例
方法:发布
接头
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
。
这非常令人困惑。请告诉我哪里出错了,我该如何解决这个问题。
由于
答案 0 :(得分:2)
objectsToSerialize
似乎是ArrayList
,但在您的代码中,您使用new StringEntity(objectsToSerialise.toString());
构建了请求正文。也就是说,您不能将ArrayList
转换为JSON,而是通常会获得通常不是JSON的字符串表示形式。
尝试更改
new StringEntity(objectsToSerialise.toString());
到
new StringEntity(objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(objectsToSerialise));