gpt4 book ai didi

java - 混淆发送 json 作为参数

转载 作者:行者123 更新时间:2023-12-02 02:52:59 24 4
gpt4 key购买 nike

我有下面的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com