在实际提出问题之前,我已经交叉检查了很多参考文献。作为大多数人,我正在调用Web服务并获得上述结果。我的问题更加具体,所以在请求之前让我添加code snippet
public static WebService getRestService(String newApiBaseUrl, String accessToken)
{
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
if (BuildConfig.DEBUG) {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
httpClient.addInterceptor(logging);
}
Gson gson = new GsonBuilder()
.setLenient()
.create();
restBuilder = new Retrofit.Builder()
.baseUrl(newApiBaseUrl)
.client(httpClient.build())
.addConverterFactory(GsonConverterFactory.create(gson));
if (accessToken != null) {
AuthenticationInterceptor interceptor =
new AuthenticationInterceptor(accessToken);
if (!httpClient.interceptors().contains(interceptor)) {
httpClient.addInterceptor(interceptor);
restBuilder.client(httpClient.build());
}
}
retrofit = restBuilder.build();
return retrofit.create(WebService.class);
}
请忽略口译员。这是我的服务生成器类,通过它可以调用所有Web服务。我正在调用一个POST方法,它将返回一个简单的响应。
我可以在" Android Monitor"中看到我的正确答案。但是当它通过JsonConverterFactory时,它会给我上面的错误。有一点我知道Web服务正在返回一个简单的文本响应,因为没有特定的东西可以返回应用程序。有没有办法可以将我的文本响应转换为类。如果我遗漏任何东西,请免费大喊。
还添加我的界面方法
@Headers({
Constants.ApiHeader.CONTENT_TYPE_JSON
})
@POST("POST_URL/{number}")
Call<MyResponseModel> getActualProductLocation(@Header("access_token") String accessToken, @Path("number") String number, @Body List<MyRequestModel> body);
更新 我设法从服务器获取了一部分代码片段。这就是他们的反应:
Response.status(200).entity("Response Success").build()
答案 0 :(得分:0)
由于后端不会使用JSON格式的数据回复您,因此您必须使用自定义转换器来处理它。
documentation一个可满足您需求的自定义转换器示例。
来自 StringConverterFactory.java
的摘录...
private static class StringConverter implements Converter<String> {
private static final MediaType PLAIN_TEXT = MediaType.parse("text/plain; charset=UTF-8");
@Override
public String fromBody(ResponseBody body) throws IOException {
return new String(body.bytes());
}
@Override
public RequestBody toBody(String value) {
return RequestBody.create(PLAIN_TEXT, convertToBytes(value));
}
private static byte[] convertToBytes(String string) {
try {
return string.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
}
...
然后在创建Retrofit
:
Retrofit retrofit = new Retrofit.Builder()
...
.addConverterFactory(StringConverterFactory.create());
...
.build();