原因:retrofit.RetrofitError:方法 POST 必须有请求正文

2023-11-24

我正在使用 Retrofit 进行 API 后调用,在尝试访问端点时收到以下错误。

     Caused by: rx.exceptions.OnErrorNotImplementedException: method POST must have a request body.
            at rx.Observable$30.onError(Observable.java:7334)
            at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:154)
            at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:111)
            at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.pollQueue(OperatorObserveOn.java:197)
            at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber$2.call(OperatorObserveOn.java:173)
            at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at 
     Caused by: java.lang.IllegalArgumentException: method POST must have a request body.
            at com.squareup.okhttp.Request$Builder.method(Request.java:236)
            at retrofit.client.OkClient.createRequest(OkClient.java:59)
            at retrofit.client.OkClient.execute(OkClient.java:53)
            at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:326)

尝试访问 post api

 @POST("/service/v2/auth/ip-address")
    rx.Observable<AuthState> verifyIP();

实际的API调用

LoginService service = CKRestClient.get().create(LoginService.class);
            service.verifyIP().observeOn(AndroidSchedulers.mainThread()).subscribe(
                    new Action1<AuthState>() {
                        @Override
                        public void call(AuthState authState) {

                        }
                    });
        });

看起来 Retrofit 希望 POST 请求有一个有效负载。已经有一个问题了:https://github.com/square/retrofit/issues/854

作为解决方法,您可以执行以下操作:

@POST("/service/v2/auth/ip-address")
rx.Observable<AuthState> verifyIP(@Body Object dummy);

然后执行以下操作:

LoginService service = CKRestClient.get().create(LoginService.class);

service.verifyIP(null).observeOn(AndroidSchedulers.mainThread()).subscribe(
  new Action1<AuthState>() {
    @Override
    public void call(AuthState authState) {
      // ...
    }
  });
});

Or, if service.verifyIP(null)抛出一个 NPE,将其替换为service.verifyIP("")或类似的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

原因:retrofit.RetrofitError:方法 POST 必须有请求正文 的相关文章

随机推荐