我正在将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很笨。