java - 混淆发送 json 作为参数

标签 java json http-post

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

相关文章:

javascript - Status-415 Nodejs 中指定的内容类型无效错误

ruby-on-rails - 使用 NSURL 使用 JSON 在 Rails 服务器上创建新帖子时重复参数

asp.net - 将 C# 字符串数组序列化为 JSON 数组

iphone - 带参数的 HTTP POST 请求

java - View 的 contentDescription 不能与 TextToSpeech 一起正常工作

java - 使用 Https 和 tomcat 进行 Spring 远程处理

java - Lucene在java中找不到方法

java - 无法使用用户管理身份凭据从 Azure 函数应用程序发送事件网格事件

objective-c - 使用 NSUrlRequest 上传文件导致零字节文件大小

python - 将 POST 请求重定向到已使用的 URL (Django)