gpt4 book ai didi

java - 带有 Retrofit 的 POST 请求给 500

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:02:06 25 4
gpt4 key购买 nike

我通过 postman 返回发送了以下正文(作为原始 JSON)

{"payload":{"email":"","username":"","password":""}}

postman call

但是,当我尝试按如下方式通过 Retrofit 发送它时,它不起作用(给出 500):

public Observable<JsonObject> signup(String email, String userName, String password) {
JsonObject data = new JsonObject();
JsonObject payload = new JsonObject();

data.addProperty("email", email);
data.addProperty("username", userName);
data.addProperty("password", password);
payload.add("payload", data);

return mShoutApiService.signup(payload);
}

服务调用和适配器如下

服务:

@POST("/signup")
Observable<JsonObject> signup(@Body JsonObject payload);

适配器:

private RestAdapter createRestAdapter(String hostUrl, GsonConverter gsonConverter, OkClient okClient) {
return new RestAdapter.Builder()
.setClient(okClient)
.setConverter(gsonConverter)
.setEndpoint(hostUrl)
.setLogLevel(LogLevel.FULL)
.setLog(new AndroidLog("SHOUT_LOG"))
.build();
}

private GsonConverter getGsonConverter(Gson gson) {
return new GsonConverter(gson);
}

private OkClient getOkClient() {
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setReadTimeout(READ_TIMEOUT, TimeUnit.SECONDS);
okHttpClient.setConnectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS);

return new OkClient(okHttpClient);
}

日志显示如下

03-23 05:04:00.380 2442-3468/shout.surge.com.shout D/SHOUT_LOG: --->       HTTP POST http://shout-api.herokuapp.com/signup
03-23 05:04:00.380 2442-3468/shout.surge.com.shout D/SHOUT_LOG: Content-Type: application/json; charset=UTF-8
03-23 05:04:00.380 2442-3468/shout.surge.com.shout D/SHOUT_LOG: Content-Length: 52
03-23 05:04:00.384 2442-3468/shout.surge.com.shout D/SHOUT_LOG: {"payload":{"email":"","username":"","password":""}}
03-23 05:04:00.384 2442-3468/shout.surge.com.shout D/SHOUT_LOG: ---> END HTTP (52-byte body)
03-23 05:04:09.180 2442-3468/shout.surge.com.shout D/SHOUT_LOG: <--- HTTP 500 http://shout-api.herokuapp.com/signup (8796ms)

看起来它们是完全相同的调用,但出于某种原因,它在我的移动应用程序中失败了。任何关于我所缺少的东西的见解都会很棒!

最佳答案

我查看了您的问题,我怀疑这确实与应用程序中调用的电话与 postman 调用的电话之间的细微差别有关。不幸的是,我无法向您解释为什么会发生这种情况,因为 500 很可能是服务器端的错误实现。

当我像这样添加 header Accept: application/json 时,问题就解决了:

@Headers("Accept: application/json")
@POST("/signup")
Observable<JsonObject> signup(@Body JsonObject payload);

我注意到我正在使用的工具 ( Advanced REST Client for chrome ) 正在为每个调用添加所述 header 。

当我删除此 header 时,我得到了您遇到的 500。您也可以使用 Accept: */*,但我不确定这是一个好的做法。

很抱歉,我无法告诉您发生这种情况的原因,但它为我解决了这个问题。我确实在 android 应用程序中尝试过。

关于java - 带有 Retrofit 的 POST 请求给 500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36122242/

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