我有一个包含大型复杂json对象的大型CouchDB。在对它们进行反序列化时,有时会出现错误,因为文档格式不正确。
遗憾的是,gson封装并没有提供比以下内容更多的信息:
com.google.gson.JsonSyntaxException:
java.lang.IllegalStateException: Expected BLAH but was BLUB我必须开始调试整个应用程序,以找出哪个文档是无法解析的文档。
我希望在异常发生时获得正在反序列化的父文档,这样我就可以记录它的id。
这有可能吗?
发布于 2013-12-07 00:18:58
因此,到目前为止,我找到的方法是创建一个记录错误的TypeAdapterFactory,并尝试创建空对象或至少返回null。这很好,虽然我在对象层次结构的最低层得到了错误(即,在无法再解析的点,所以我错过了关于它是哪个文档的信息)。
代码如下:
public class RobustTypeAdapterFactory implements TypeAdapterFactory {
private static final Logger LOG = LoggerFactory.getLogger(RobustTypeAdapterFactory.class);
@Override
public <T> TypeAdapter<T> create(final Gson gson, final TypeToken<T> type) {
final TypeAdapter<T> delegate = gson.getDelegateAdapter(this, type);
return new TypeAdapter<T>() {
@Override
public void write(final JsonWriter out, final T value) throws IOException {
delegate.write(out, value);
}
@SuppressWarnings("unchecked")
@Override
public T read(final JsonReader in) throws IOException {
try {
return delegate.read(in);
} catch (IOException | IllegalStateException | JsonSyntaxException e) {
LOG.info("Could not parse value for {}", type.getRawType());
in.skipValue();
try {
// try to create empty object
return (T) type.getRawType().newInstance();
} catch (ReflectiveOperationException e1) {
// we couldn't create an empty object, so we return null
return null;
}
}
}
};
}
}还有更好的主意吗?
https://stackoverflow.com/questions/20402590
复制相似问题