Retrofit(1-2)中的Dinamic标题不起作用

时间:2016-03-09 19:32:16

标签: android django-rest-framework retrofit2

我试图向我的服务器发出authtoken GET 请求。 我试图这样做:

public interface FixedRecApi {


    public static final String ENDPOINT = "http://******.pythonanywhere.com/";

    //@Headers("Authorization: Token ce7950e8d0c266986b7f972407db898810322***") this thing work well!!
    @GET("/auth/me/")
    Observable<User> me(@Header("Authorization: Token") String token); //this does not work at all!
    Observable<User> me();


}

如您所见,具有显式标题的行:@Headers - 工作完美。 但是当我尝试将其作为参数传递时 - 它表示&#34;没有提供凭证&#34;。 我的申请onCreate:

@Override
    public void onCreate() {
        super.onCreate();
        ActiveAndroid.initialize(this);

        Retrofit retrofit = new Retrofit.Builder()

                .baseUrl(FixedRecApi.ENDPOINT)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .addConverterFactory(
                        GsonConverterFactory.create(new GsonBuilder()
                                .excludeFieldsWithModifiers(Modifier.FINAL, Modifier.TRANSIENT, Modifier.STATIC)
                                .excludeFieldsWithoutExposeAnnotation()
                                .serializeNulls()
                .create()))
                .build();

        service = retrofit.create(FixedRecApi.class);

    }

不知道这件事有什么问题。拦截器也不起作用......

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。标题由两部分组成:

  1. 标题名称:“Authrorization”
  2. 然后冒号
  3. 标题值:“令牌ce7950e8d0c266986b7f972407db898810322 ***”
  4. 所以,改造用法应该是:

    Observable<User> me(@Header("Authorization") String token);
    

    然后例如在MainActivity中:

    RetrofitApi.me("Token " + "ce7950e8d0c266986b7f972407db898810322***");