Android post请求没有application/json正文

问题描述 投票:0回答:1

我正在使用 Okhttp3 模块通过 Android 客户端和服务器进行 http 请求训练。我已经使用了 get 请求,没有任何问题,但是当我尝试 post 请求时,它们无法到达服务器。

使用我验证的一些 Log.d 格式不正确,并且服务器要求 application/json 主体,但对我来说,看起来我做的一切都是正确的。我打开了这个选项

android:usesCleartextTraffic="true"

在清单中以避免因缺乏加密而被阻止。 我还尝试了 enqueue() 方法而不是 execute() 作为 post 请求的异步方法,但它无论如何都不起作用,我不明白为什么我应该以同步方式发送我的请求,因为我不需要它,所以我切换回来 这是代码

                    JSONObject jsonObject = new JSONObject();
                    jsonObject.put("user", "IP-Alby");
                    jsonObject.put("password", "blabla");

                    RequestBody requestBody = RequestBody.create(
                            jsonObject.toString(),
                            MediaType.parse("application/json; charset=utf-8")
                    );

                    Log.d("NetworkRequest", "request created");
                    Request postRequest = new Request.Builder().url("http://x.x.x.x:25565/api/register").post(requestBody).build();
                    Response response = client.newCall(postRequest).execute();
                    int statusCode = response.code();
                    Log.d("NetworkRequest", "status code: "+statusCode);
                    String responseBody = response.body().string();
                    Log.d("NetworkRequest", "Response Body: " + responseBody);
                    if (response.isSuccessful()) {
                        Log.d("NetworkRequest", "POST was correct");
                        String responseBody2 = response.body().string();
                        Log.d("NetworkRequest", responseBody2);
                    }
                    if (!response.isSuccessful()) {
                        Log.e("NetworkRequest", "something went wrong");
                    }

这是我得到的经过过滤的 LogCat 响应

D  request created
D  status code: 400
D  Response Body: Expected application/json content type
E  something went wrong

如果您注意到,它不会触发response.isSuccesful() 我会避免考虑网址拼写错误,因为我已经以其他方式测试了它,并且它有效,只是在这个应用程序上它让我头痛。 有什么帮助吗?正文内容格式正确吗?

java android json client-server okhttp
1个回答
0
投票

基于此错误:

Response Body: Expected application/json content type

我假设您的请求需要在请求标头中定义此内容。这个特定的标头需要添加到

postRequest
对象中。尝试用以下内容替换您的
postRequest
构建器:

Request postRequest = new Request.Builder()
        .url("http://x.x.x.x:25565/api/register")
        .post(requestBody)
        .headers(new Headers.Builder()
                .add("Content-Type", "application/json")
                .build())
        .build();

我已经有一段时间没有写 Java 代码了,但我认为那是正确的。这里的重点是确保您将正确的

headers
添加到
Request.Builder()

© www.soinside.com 2019 - 2024. All rights reserved.