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);
}
@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()
因为后端不使用JSON格式的数据回复您,所以您必须使用自定义转换器来处理它。
这里有一个自定义转换器的例子,可以满足您的需要。
来自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 = new Retrofit.Builder()
...
.addConverterFactory(StringConverterFactory.create());
...
.build();
我在postman上传递了一个update user请求,并得到了一个成功的响应(参见图片),现在,当我尝试在应用程序中使用Reverfit 2执行同样的操作时,我得到的错误为。有趣的是,我以前遇到过这个错误,我知道如果我的模型不符合响应,通常会发生这种情况。但这一次我想我已经检查了所有的框,但我得到了错误。如果有人知道我错在哪里... 我在《邮差》中的回应: 我的POJO:
目前,我正在得到 com.google.gson.jsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_OBJECT,但在第1行第2列路径$处为BEGIN_ARRAY 请帮帮我.
问题内容: 此创建异常 非常感谢您的帮助。 问题答案: 让我们看看您收到的错误。 预期的BEGIN_OBJECT 您的JSON是一个对象,所有JSON对象都用花括号({})括起来。因此,BEGIN_OBJECT为{。并期待它在某个地方。 但在STRING 但是相反,他找到了一个字符串“ Something”。仍然没有告诉我们在哪里。 在第1行第1列的路径$ 啊,完美。在第1行的第1列。这是JSON
我得到以下错误: java.lang.IllegalStateException:需要一个字符串,但在第1行第29列路径$.entree[0]处是BEGIN_OBJECT。photo 这对我来说是没有意义的,因为我的json响应应该构造成如下所示: JSON数据: 你看到照片在我的课上是一个对象而不是一个字符串了吗?那我做错了什么?
我有以下JSON结构: 以下是我的: 下面是我的POJO类: 最后,这里是我正在进行网络调用的代码:
我使用的是MVVMAndroid架构组件+改型结构。 答复: 现在这些是我的课。 虽然每次我都失败了。处为BEGIN_ARRAY 高级帮助将非常感谢!