Android RetroFit:400回应

时间:2018-07-24 14:03:25

标签: android retrofit

我正在将Retrofit插入我的android应用。

这是我进行改造的方法,请注意日志记录和标头的拦截器。

 public void buildRetrofit(String token){
        OkHttpClient.Builder httpClient = new OkHttpClient.Builder();

        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);

        httpClient.addNetworkInterceptor(new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                Request newRequest  = chain.request().newBuilder()
                        .header("Authorization", "Bearer " + token)
                        .header("Content-Type", "application/json")
                        .header("api-version", "1")
                        .method(chain.request().method(), chain.request().body())
                        .build();
                return chain.proceed(newRequest);
            }
        });

        httpClient.addInterceptor(logging);

        Retrofit.Builder buidler = new Retrofit.Builder()
                .baseUrl("XXX_HIDDEN_FORSTACKOVERFLOW")
                .addConverterFactory(GsonConverterFactory.create())
                .client(httpClient.build());

        retroFit = buidler.build();
    }

我这样打来电话

 OrderApi orderApi = mainActivity.retroFit.create(OrderApi.class);
        Call<Order> call = orderApi.getOpenOrder();

        call.enqueue(new Callback<Order>() {
            @Override
            public void onResponse(Call<Order> call, Response<Order> response) {
                Order a = response.body();

                int b = 1;
            }

            @Override
            public void onFailure(Call<Order> call, Throwable t) {

            }
        });

这是实际请求标记的方式

public interface OrderApi {

    @POST("/HIDDEN")
    Call<Order> getOpenOrder();
}

最后,这是订单类

public class Order {

    private String orderId;
    private OrderStatus orderStatus;

    public String getOrderId(){
        return orderId;
    }

    public OrderStatus getOrderStatus() {
        return orderStatus;
    }
}

我得到400的响应。我不知道为什么,并且它可以在邮递员等中工作。需要注意的是,响应包含的属性比类中的更多。我只想证明概念,但这不应该使事情出错吗?

........ 设法修复它。必须发送一个空的正文请求,因为它是一个帖子,但我没有发布任何内容。 API很笨。

请参见此处发送空请求Send empty body in POST request in Retrofit

0 个答案:

没有答案