我的Api正在接受Content-Type application / json作为标题。 我按照Retrofit Docs中的说法完美地设置了Header。
@Headers("Content-Type: application/json")
@POST("user/classes")
Call<playlist> addToPlaylist(@Body PlaylistParm parm);
但是在Request Log中它返回Content-Type txt / html。所以我应该如何解决这个问题?这个api在POSTMAN中运行良好
答案 0 :(得分:17)
你可以在我的解决方案中尝试一个:
@POST("user/classes")
Call<playlist> addToPlaylist(@Header("Content-Type") String content_type, @Body PlaylistParm parm);
然后致电
mAPI.addToPlayList("application/json", playListParam);
或强>
创建HttpClient对象
OkHttpClient httpClient = new OkHttpClient();
httpClient.networkInterceptors().add(new Interceptor() {
@Override
public com.squareup.okhttp.Response intercept(Chain chain) throws IOException {
Request.Builder requestBuilder = chain.request().newBuilder();
requestBuilder.header("Content-Type", "application/json");
return chain.proceed(requestBuilder.build());
}
});
然后添加到改装对象
Retrofit retrofit = new Retrofit.Builder().baseUrl(BASE_URL).client(httpClient).build();
答案 1 :(得分:14)
尝试使用Retrofit 1.9和2.0。对于Json内容类型。
{"firstName" :"Arnold", "lastName" : "tpxjzqi"}
你可以添加更多,即
@Headers({"Accept: application/json"})
@POST("user/classes")
Call<playlist> addToPlaylist(@Body PlaylistParm parm);
答案 2 :(得分:3)
尝试:
@POST("user/classes")
Call<playlist> addToPlaylist(
@Header("Content-Type") String contentType,
@Body PlaylistParm parm);
答案 3 :(得分:1)
Retrofit 2.0令我发疯。 我终于放弃了,并尝试: Android Async Http
它第一次起作用。 我知道您在想我正在寻找stckovflw点 或我正在某种程度上燃烧改造。 我不是。 我的用例是使用简单的内联身份验证来调用我的bitbucket帐户: https://[username]:[password]@api.bitbucket.org/2.0/repositories/[username]
通过翻新,我得到了另一个回应。一个Http 200但不是有效负载 我希望,就像您从邮递员那里得到的一样。 我尽我所能使它工作。 我觉得浪费了2天或更长时间。 我想您可能在想,好吧,您没有正确形成baseUrl或资源的URI。看看上面的内容,它有多么简单……我试图将URI缩短到最小。并将基本网址设置为上述最长的网址;提醒:我收到了Http 200。但是响应负载不正确!
我的一位同事建议使用asynch lib。并给出了所有建议 对于改造和我度过的时间,我表示怀疑。 它是第一次工作!
答案 4 :(得分:0)
也许你需要&#39; /&#39;并且最好不要自己更改内容类型。 就像这样:
@POST("user/classes/")
Call<playlist> addToPlaylist(@Body PlaylistParm parm);
答案 5 :(得分:0)
这是从retrofit2(v2.5)和okhttp3开始使用的解决方案。如果将这些标头添加到许多请求中,效果特别好
OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();
httpClientBuilder.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request.Builder requestBuilder = chain.request().newBuilder();
requestBuilder.header("Content-Type", "application/json");
requestBuilder.header("Accept", "application/json");
return chain.proceed(requestBuilder.build());
}
});
OkHttpClient httpClient = httpClientBuilder.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(httpClient)
.build();
答案 6 :(得分:0)
我们也可以为特定请求指定标头。
@Headers("Content-Type: application/json")
@Get
fun getData(@Url url:String):List<Obj>