Android 使用OkHTTP进行改装,不使用@FormUrlEncoded设置内容类型

Android 使用OkHTTP进行改装,不使用@FormUrlEncoded设置内容类型,android,retrofit2,okhttp,okhttp3,Android,Retrofit2,Okhttp,Okhttp3,我试图通过Android上的改型2通过x-www-form-urlencoded实现auth,但遇到了一个问题,标题内容类型没有设置@FormUrlEncoded注释,我试图手动设置,但是,当我使用类似coent Type的输入法设置它时,它工作正常,我可以在标题中看到它 改装版本:2.4.0 所以我的问题是:为什么@FormUrlEncoded不设置内容类型以及@Header注释,或者什么可以从Header中删除它 我的请求: @FormUrlEncoded @POST("acco

我试图通过Android上的改型2通过
x-www-form-urlencoded
实现auth,但遇到了一个问题,标题
内容类型
没有设置
@FormUrlEncoded
注释,我试图手动设置,但是,当我使用类似
coent Type
的输入法设置它时,它工作正常,我可以在标题中看到它

改装版本:2.4.0

所以我的问题是:为什么
@FormUrlEncoded
不设置内容类型以及
@Header
注释,或者什么可以从Header中删除它

我的请求:

   @FormUrlEncoded
   @POST("account/login")
   Single<LoginResponse> login(@Field("memberId") String memberId,
                                    @Field("pin") String pin);
作为一种解决方法,我实现了以下拦截器:

Interceptor createHeaderTransformationInterceptor() {
    return chain -> {
        final Request request = chain.request();
        String dataType = request.header("Data-Type");
        final Request resultRequest = dataType == null
                ? request
                : chain.request().newBuilder()
                .removeHeader("Data-Type")
                .addHeader("Content-Type", dataType)
                .build();
        return chain.proceed(resultRequest);
    };
}
它可以与以下注释配合使用:

@Headers({"Data-Type: application/x-www-form-urlencoded"})
UPD:我的拦截器没有看到的原因是在存储内容类型的地方。在拦截器中查看该标头的正确方法:

Interceptor createHeaderTransformationInterceptor() {
    return chain -> {
        final Request request = chain.request();
        String dataType = request.header("Data-Type");
        final Request resultRequest = dataType == null
                ? request
                : chain.request().newBuilder()
                .removeHeader("Data-Type")
                .addHeader("Content-Type", dataType)
                .build();
        return chain.proceed(resultRequest);
    };
}
根据这项要求

@FormUrlEncoded
@POST("account/login")
Single<LoginResponse> login(@Field("memberId") String memberId,
                                        @Field("pin") String pin);
它通过此请求以详细模式打印所有日志

@FormUrlEncoded
@POST("account/login")
Single<LoginResponse> login(@Field("memberId") String memberId,
                                        @Field("pin") String pin);

它通过@FormUrlEncoded注释“Content Type:FormUrlEncoded”以详细模式打印所有日志

。使用“拦截器”并通过@FormUrlEncoded注释记录您的结果,“内容类型:FormUrlEncoded”由改装自动添加。使用“拦截器”并记录您的结果。我的
日志拦截程序
没有看到。谢谢。我的
LoggingInterceptor
没有看到这一点。
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();

            OkHttpClient okHttpClient = new OkHttpClient.Builder()
                    .addInterceptor(interceptor.setLevel(HttpLoggingInterceptor.Level.BODY))
                    .connectTimeout(2, TimeUnit.MINUTES)
                    .writeTimeout(2, TimeUnit.MINUTES)
                    .readTimeout(2, TimeUnit.MINUTES)
                    .build();