我正在使用 GSON 和 Retrofit。我想禁用空数组字段反序列化。
DTO:
public class Entity implements Serializable {
@SerializedName("body")
@Expose
private BodyObject body;
我与一个rest API
。如果正文字段为空,则发送空Array
:
{
"body": []
}
例外:
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 443 path $.body
如果主体被填满,那么他们会发送正确的对象。
{
"body": {
"und": [
{
"value": "Test ....",
"summary": "",
"format": "filtered_html",
"safe_value": "<p>Test ....</p>\n",
"safe_summary": ""
}
]
}
}
-
Gson gson = new GsonBuilder()
.setLenient()
.create();
如何删除或禁用这些空数组反序列化?
正如 Alrama 暗示的那样,您可以通过创建自己的JsonDeserializer
.
就像是
public class BodyObjectDeserializer implements JsonDeserializer<BodyObject> {
@Override
public BodyObject deserialize(JsonElement json, Type typeOfT
,JsonDeserializationContext context)
throws JsonParseException {
try {
return new Gson().fromJson(json, typeOfT);
} catch (JsonSyntaxException e) {
log.warn("Body seems empty: {}",e.getMessage());
}
return null;
}
}
并将其注册到您的GSON
您用来反序列化的。
Gson gson = new GsonBuilder()
.setLenient() // maybe you do not need this
.registerTypeAdapter(BodyObject.class, new BodyObjectDeserializer())
.create();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)