我有下面的 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
内容。即阻止
。我认为这可能是我的通话问题,并在 Postman
中尝试了相同的操作。详细信息如下。
网址: https://westus.api.cognitive.microsoft.com/luis/v1.0/prog/apps/ {appId}/示例?
方法:发布
标题:
Content-Type:application/json
Ocp-Apim-Subscription-Key:{mySubscriptionKey}
正文:**原始->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));
关于java - 混淆发送 json 作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43527681/