【问题标题】:Invalid "Content-Type" from Java code but works in PostmanJava 代码中的“Content-Type”无效,但在 Postman 中有效
【发布时间】:2022-01-22 03:32:16
【问题描述】:

我正在尝试向特定 URL 发送 POST 请求,下面是我的 Java 代码来执行此操作...

            OkHttpClient httpClient = new OkHttpClient().newBuilder().build();
            
            MediaType JSON = MediaType.parse("application/json; charset=utf-8");
            
            RequestBody body = RequestBody.create("<JSON_AS_STRING>", JSON);
            
            Request request = new Request.Builder()
              .url(url)
              .method("POST", body)
              .addHeader("Authorization", getToken())
              .addHeader("Content-Type", "application/json; charset=utf-8")
              .build();

            Response response = httpClient.newCall(request).execute()

当请求被执行时,我在错误代码 100 下得到“无效的内容类型”。我将 JSON 正文存储在一个字符串中并使用它并定义媒体类型来创建正文。

但是当我从 Postman 发送相同的请求时,我得到了成功代码 204。

在 Postman 中,我选择了正文作为 JSON,并在正文中传递 JSON,并设置 URL 和其他标头(如授权),当我发送请求时,我收到 204。

但是当我将其更改为文本时,我会收到与我的 Java 代码相同的错误“内容类型无效”。我正在为客户端、请求和响应使用 OkHttp3 库。我的 java 代码如何不将媒体类型作为应用程序/json。我什至尝试在带有 application/json 的标头中传递“charset=utf-8”,但仍然无法正常工作。

任何可能出错的建议,这不是我第一次创建 okhttp3 请求,而是第一次看到这样的事情......

我什至尝试复制您可以使用邮递员创建的 Java 代码...仍然无法正常工作。

【问题讨论】:

    标签: java http-post okhttp


    【解决方案1】:

    您可以在服务器上记录整个传入请求(标头和有效负载)吗?这样你就会看到它们是否有任何不同。我会尝试的另一件事是使用 cURL 等低级工具而不是 Postman 发送请求。

    (礼貌:How do I POST JSON data with cURL?

    curl  http://localhost:8080/api/login  -H "content-type: application/json"  -d "{\"email\": \"user@admin.com\", \"password\": \"123456\"}"
    

    您还可以从 Postman 本身中提取 cURL 命令

    【讨论】:

      【解决方案2】:

      我发现了问题,当您设置 MediaType 时,添加了“charset=utf-8”,这导致了我提到的错误。所以我手动删除了“charset=utf-8”并尝试发送请求,这次我使用 fiddler 来监听 eclipse 发送的请求,结果是,无论你是否传递了该字符集,MediaType 都会附加它,所以我尝试将 MediaType.parse() 上的第二个参数设置为 null,并将 Content Type 的标头传递为 application/json,它就像一个魅力。

      【讨论】:

      • 很高兴听到它成功了
      猜你喜欢
      • 1970-01-01
      • 2019-11-11
      • 2018-07-24
      • 1970-01-01
      • 2021-12-09
      • 2018-11-14
      • 2021-02-11
      • 2018-07-14
      • 2020-04-28
      相关资源
      最近更新 更多