困惑发送json作为参数
问题描述:
我有下面的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
。
这很混乱。请让我知道我哪里错了,我该如何解决这个问题。
感谢
答
objectsToSerialize
似乎是一个ArrayList
,但在你的代码中构建请求体与new StringEntity(objectsToSerialise.toString());
。也就是说,您不会将ArrayList
转换为JSON,而是通常只获取其不是JSON的字符串表示形式。
尝试改变
new StringEntity(objectsToSerialise.toString());
到
new StringEntity(objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(objectsToSerialise));
感谢的人,这个工作。再次感谢! – user3872094