来自 Java 代码的 "Content-Type" 无效,但在 Postman 中有效
Invalid "Content-Type" from Java code but works in Postman
我正在尝试向特定 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 Body 存储在一个字符串中并使用它并定义媒体类型以创建一个body.
但是当我从 Postman 发送相同的请求时,我收到成功代码 204。
在 Postman 中我选择了 body 作为 JSON 并在 body 中传递 JSON 并设置 URL 和其他 header 就像授权一样,当我发送请求时,我收到 204。
但是当我将其更改为文本时,我会收到与 Java 代码相同的错误“无效内容类型”。我正在为客户端、请求和响应使用 OkHttp3 库。我的 java 代码怎么没有将媒体类型设为 application/json。我什至尝试在 header 中使用 application/json 传递“charset=utf-8”,但仍然无法正常工作。
任何可能出错的建议,这不是我第一次创建 okhttp3 请求,但第一次看到这样的东西......
我什至尝试复制 java 代码片段,您可以使用邮递员创建它...仍然无法正常工作。
您能否在服务器上记录整个传入请求(header 和负载)?这样你就会看到它们是否有任何不同。我尝试的另一件事是使用 low-level 工具(例如 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 命令
我发现了问题,当您设置 MediaType 时,添加了“charset=utf-8”,这导致了我提到的错误。所以我手动删除了“charset=utf-8”并尝试发送请求,这次我使用 fiddler 来侦听从 eclipse 发送的请求,事实证明,无论您是否传递该字符集,MediaType 都会附加它,所以我尝试将 MediaType.parse() 上的第二个参数设置为 null,然后将内容类型为 application/json 的 header 传递给它,它就像一个魅力。
我正在尝试向特定 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 Body 存储在一个字符串中并使用它并定义媒体类型以创建一个body.
但是当我从 Postman 发送相同的请求时,我收到成功代码 204。
在 Postman 中我选择了 body 作为 JSON 并在 body 中传递 JSON 并设置 URL 和其他 header 就像授权一样,当我发送请求时,我收到 204。
但是当我将其更改为文本时,我会收到与 Java 代码相同的错误“无效内容类型”。我正在为客户端、请求和响应使用 OkHttp3 库。我的 java 代码怎么没有将媒体类型设为 application/json。我什至尝试在 header 中使用 application/json 传递“charset=utf-8”,但仍然无法正常工作。
任何可能出错的建议,这不是我第一次创建 okhttp3 请求,但第一次看到这样的东西......
我什至尝试复制 java 代码片段,您可以使用邮递员创建它...仍然无法正常工作。
您能否在服务器上记录整个传入请求(header 和负载)?这样你就会看到它们是否有任何不同。我尝试的另一件事是使用 low-level 工具(例如 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 命令
我发现了问题,当您设置 MediaType 时,添加了“charset=utf-8”,这导致了我提到的错误。所以我手动删除了“charset=utf-8”并尝试发送请求,这次我使用 fiddler 来侦听从 eclipse 发送的请求,事实证明,无论您是否传递该字符集,MediaType 都会附加它,所以我尝试将 MediaType.parse() 上的第二个参数设置为 null,然后将内容类型为 application/json 的 header 传递给它,它就像一个魅力。