这是我面临的问题:
在acf字段中响应数据
acf字段中没有数据的响应
但是,如果“ acf”字段中没有数据,则返回空的json数组,这不允许解析带有此错误的响应。
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 9555 path $[2].acf
如果某些字段为空,如何处理这种类型的响应?
答案 0 :(得分:0)
您需要使用Gson Serializatin和反序列化。关于对象/属性的注释可以为null。为此,您必须为您的回复设置pojo类。
您的代码将如下所示。
@Nullable
@SerializeName ("acf")
acfObjectType acf;
答案 1 :(得分:0)
JSON中的{}是一个空的pojo。
您可以编写一个执行此任务的委派转换器,默认情况下该行为不会添加到Retrofit中。
class NullOnEmptyConverterFactory implements Converter.Factory {
@Override public Converter<ResponseBody, ?> responseBody(Type type, Annotation[] annotations, Retrofit retrofit) {
final Converter<ResponseBody, ?> delegate = retrofit.nextResponseBodyConverter(this, type, annotations);
return new Converter<>() {
@Override public void convert(ResponseBody body) {
if (body.contentLength() == 0) return null;
return delegate.convert(body);
}
};
}
}
Retrofit retrofit = new Retrofit.Builder()
.endpoint(..)
.addConverterFactory(new NullOnEmptyConverterFactory())
.addConverterFactory(GsonConverterFactory.create())
.build();