gpt4 book ai didi

java - RXJava Retrofit 返回 POST HTTP 错误 500

转载 作者:行者123 更新时间:2023-12-02 09:21:42 25 4
gpt4 key购买 nike

我在使用 RXJAVA 和 RETROFIT 的 POST 上收到 HTTP 500 内部服务器错误,我不完全理解此调用是如何工作的,但另一个调用工作正常,具有相同的 BASE_URL 常量。

这是我的界面:

public interface AuthApi {

@GET("user/{id}") //users/id
Flowable<User> getUser(
@Path("id") int id
);

@POST("login")
@FormUrlEncoded
Flowable<User> login(
@Field("username") String username,
@Field("password") String password
);
}

@GET 方法工作正常@POST 方法返回错误

我相信这与字符串或 post 请求的构造方式有关,因为 Postman 可以完美地处理以下 json:

{
"username": "Test1",
"password": "test1"
}

这是 rxjava 调用:

authApi.login("Test1","test1")
.toObservable()
.subscribeOn(Schedulers.io())
.subscribe(new Observer<User>() {
@Override
public void onSubscribe(Disposable d) {
}

@Override
public void onNext(User user) {
Log.d(TAG,"onNext :"+ user.getEmail());
}

@Override
public void onError(Throwable e) {
Log.e(TAG, "onError: ", e);
}

@Override
public void onComplete() {

}
});

这将返回 HTTP 500 内部服务器错误

但是为了给大家提供更多详细信息,这里是错误日志:

E/AuthViewModel: onError: 
retrofit2.adapter.rxjava2.HttpException: HTTP 500 INTERNAL SERVER ERROR
at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:54)
at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)
at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:47)
at io.reactivex.Observable.subscribe(Observable.java:10838)
at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)
at io.reactivex.Observable.subscribe(Observable.java:10838)
at io.reactivex.internal.operators.flowable.FlowableFromObservable.subscribeActual(FlowableFromObservable.java:29)
at io.reactivex.Flowable.subscribe(Flowable.java:12978)
at io.reactivex.internal.operators.flowable.FlowableOnBackpressureLatest.subscribeActual(FlowableOnBackpressureLatest.java:32)
at io.reactivex.Flowable.subscribe(Flowable.java:12978)
at io.reactivex.Flowable.subscribe(Flowable.java:12924)
at io.reactivex.internal.operators.observable.ObservableFromPublisher.subscribeActual(ObservableFromPublisher.java:31)
at io.reactivex.Observable.subscribe(Observable.java:10838)
at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)
at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452)
at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)
at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)

这是预期的响应:

{
"email": "test1m@test1.ie",
"id": 11,
"username": "Test1"
}

我是否忽略了什么?你们有什么建议给我吗?有没有办法调试 POSt 请求以实际看到 POSt 请求?

最佳答案

检查这个answer 。这是您检查应用程序的网络请求和响应的方法。此外,如果您使用 @FormUrlEncoded 发送 POST 请求,则需要在服务器端启用该选项才能正确处理。您可以尝试使用 @Body 而不是 @FormUrlEncoded@Field

@POST("login")
Flowable<User> login(
@Body LoginData data
);

其中 UserInfo 是类。


public class LoginData {

private String username;
private String password;

public LoginData(String username, String password) {
this.username = username;
this.password = password;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

}

关于java - RXJava Retrofit 返回 POST HTTP 错误 500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58657469/

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