GSON 忽略类型错误的元素
我正在使用Retrofit(与OkHttp和GSON结合使用)与在线Web服务进行通信。Web 服务在其所有响应之间都有一个默认的包装器,类似于:
{
"resultCode":"OK",
"resultObj":"Can be a string or JSON object / array",
"error":"",
"message":""
}
在此示例中,将是 或 。此外,仅当处理请求时发生错误时才包含任何内容。最后,但并非最不重要的一点是,将包含调用的实际结果(这是示例中的字符串,但某些调用返回JSON数组或JSON对象)。resultCode
OK
NO
error
message
resultObj
为了处理这个元数据,我创建了一个泛型类,就像这样:
public class ApiResult<T> {
private String error;
private String message;
private String resultCode;
private T resultObj;
// + some getters, setters etcetera
}
我还创建了表示有时给出的响应的类,并且定义了一个用于改造的接口,看起来有点像这样:resultObj
public interface SomeWebService {
@GET("/method/string")
ApiResult<String> someCallThatReturnsAString();
@GET("/method/pojo")
ApiResult<SomeMappedResult> someCallThatReturnsAnObject();
}
只要请求有效,这一切都可以正常工作。但是,当服务器端发生错误时,它仍然会返回 String 类型的 。这会导致Retrofit RestAdapter / GSON库中崩溃,并显示如下消息:resultObj
someCallThatReturnsAnObject
改造。RetrofitError: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException:
预期BEGIN_OBJECT,但在第 1 行第 110 列路径 $.resultObj 处为 STRING
现在,最后,我的问题是:
- 有没有一种(简单的)方法来告诉GSON,如果它与预期的类型不匹配,它应该忽略(又名“nullify”)属性?
- 我可以告诉GSON将空字符串视为空字符串吗?