改造 - POST 带@Path 且不带参数的请求

Retrofit - POST request with @Path and without parameters

对API的请求如下:

POST /verify/phone/{userid}/

Mandatory parameters: userid (integer)

Return: nothing

如果我想验证 ID 为 1 的用户(例如),我总是收到 Bad Request 错误:

Response{protocol=http/1.1, code=400, message=Bad Request, url=http://dummyapi.com/verify/phone/1/}

使用 Postman 发布相同的请求效果很好。

代码:

@POST("/verify/phone/{userid}/") Call<String> postVerifyPhone(@Path("userid") int userId);

public void postVerifyPhone(int userID){
    showProgressBar();

    RestClient.GitApiInterface service = RestClient.getClient();
    Call<String> call = service.postVerifyPhone(userID);
    call.enqueue(new Callback<String>() {
        @Override
        public void onResponse(Response<String> response) {
            hideProgressBar();

            if (response.isSuccess()) {
                String result = response.body();
            } else {
                Log.d("Fail: ", response.body()); //everytime here with Bad Request
            }
        }

        @Override
        public void onFailure(Throwable t) {
            hideProgressBar();
        }
    });
}

我使用 String 作为 return 类型,因为当数据库中没有具有请求 ID 的用户时会出现 returned 消息。

可能是什么原因?

我正在调用下面的代码来读取响应数据。

public void postVerifyPhone(int userID){
          RestAdapter restAdapter = new RestAdapter.Builder()
                 .setEndpoint(Constants.URL).build();
          RetrofitApi retrofitApi = restAdapter.create(RetrofitApi.class);
          retrofitApi.postVerifyPhone(userID, new Callback<Response>() {
          @Override
          public void success(Response response, Response response2) {
                BufferedReader reader = null;
                StringBuilder sb = new StringBuilder();
                try {
                    reader = new BufferedReader(new InputStreamReader(response.getBody().in()));
                    String line;
                    try {
                        while ((line = reader.readLine()) != null) {
                            sb.append(line);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }catch (IOException e) {
                    e.printStackTrace();
                }
                  String result = sb.toString();
//                System.out.println("res:" + result.toString());

            }
            @Override
            public void failure(RetrofitError error) {
                hidePDialog();
            }
        });


}

下面是 postVerifyPhone() 代码

@FormUrlEncoded
    @POST("/verify/phone/")
    public void postVerifyPhone(@Field("userID") String userID, Callback<Response> resonse);

它工作正常 me.please 检查一次。

我认为正确的注释是@PathParam,而不是@Path