【发布时间】:2017-08-11 23:28:11
【问题描述】:
我正在使用 Gson 来处理 Json 响应。有时我会遇到异常,但不幸的是我没有足够的上下文来查明问题的确切位置。
JsonReader 创建如下:
private JsonReader getJsonReader(final HttpEntity entity) throws IOException {
final InputStreamReader reader = new InputStreamReader(entity.getContent(), StandardCharsets.UTF_8);
return new JsonReader(reader);
}
我的想法是继承 InputStreamReader 并记录通过它的所有内容,以便在引发异常时获得更多上下文。
有没有更好的办法?
【问题讨论】:
-
“更好”是一个非常模糊的术语。我认为您的想法是合理的:应该很容易实现;并且不需要对您的代码库进行任何“戏剧性”的更改。
-
异常通常应该包含足够的上下文(Jackson 异常在这方面肯定从未让我失望过)。这将取决于我猜的框架。子类化
InputStream或简单地使用调试器应该可以查明问题。 -
1)
JsonReader.toString()输出当前解析位置。这是一个很好的背景吗? 2) 如果有必要,我会继承JsonReader,而不是InputStreamReader:JsonReader通过设计剥离冗余令牌。 (假设一个打印/格式化的输入流将记录每个空格,而装饰JsonReader将仅记录 JSON 令牌)。 -
@Roland 好吧,这取决于您期望的上下文。 :) 我也想过将
Reader子类化(但实际上不是InputStreamReader有利于装饰),但是由于您更关注Gson 的东西,我会实现类似JsonReader的子类的东西最后一个令牌的短队列可能具有它们各自的值。是的,实现起来稍微困难一些,但它肯定会去除空格等。但是,您可能还想跟踪LoggingReader中的位置(完全读取的字节),以便更准确地定位无效 JSON。
标签: java json gson inputstream