- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我向 api 发送查询,并使用 Jackson 将 json 结果映射到我的类。当我得到一些结果时,它工作正常,但是当没有结果时,它会失败并显示
java.io.EOFException: No content to map to Object due to end of input
at org.codehaus.jackson.map.ObjectMapper._initForReading(ObjectMapper.java:2766)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2709)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1854)
at com.jthink.discogs.query.DiscogsServerQuery.mapQuery(DiscogsServerQuery.java:382)
at com.jthink.discogs.query.SearchQuery.mapQuery(SearchQuery.java:37)*
但问题是 api 根本没有返回任何内容,所以我不明白为什么它会失败。
这是查询:
http://api.discogs.com/database/search?page=1&type=release&release_title=nude+and+rude+the+best+of+iggy+pop
这就是我得到的结果
{
"pagination": {
"per_page": 50,
"pages": 1,
"page": 1,
"urls": {},
"items": 0
},
"results": []
}
这是我试图映射到的顶级对象
public class Search
{
private Pagination pagination;
private Result[] results;
public Pagination getPagination() {
return pagination;
}
public void setPagination(Pagination pagination) {
this.pagination = pagination;
}
public Result[] getResults() {
return results;
}
public void setResults(Result[] results) {
this.results = results;
}
}
我猜测问题与返回的结果数组为空有关,但看不出我做错了什么
编辑:下面的评论是正确的,尽管我通常会收到
{
"pagination": {
"per_page": 50,
"pages": 1,
"page": 1,
"urls": {},
"items": 0
},
"results": []
}
在这些情况下没有问题,但有时我似乎只是得到一个空字符串。现在我想知道问题是否在于我如何从输入流读取
if (responseCode == HttpURLConnection.HTTP_OK)
InputStreamReader in= new InputStreamReader(uc.getInputStream());
BufferedReader br= new BufferedReader(in);
while(br.ready())
{
String next = br.readLine();
sb.append(next);
}
return sb.toString();
}
虽然我在收到响应代码之前不会读取内容,但是否有可能我第一次调用 br.ready() 时在它准备好之前调用它,因此我不读取输入
编辑2:
将上面的代码更改为简单
String line;
while ((line = br.readLine()) != null)
{
sb.append(line);
}
解决了问题。
最佳答案
虽然已经有一个解决方案,但我建议您首先创建 JsonParser
,然后查看是否有任何输入,如果有,则使用数据绑定(bind)。这比逐行读取输入、构造字符串,然后将其交给解析器要快得多。
JsonParser jp = jsonFactory.createJsonParser(uc.getInputStream());
Search result = null;
if (jp.nextToken() != null) { // end-of-input
result = jp.readValueAs(Search.class);
}
jp.close();
return result;
关于java - 由于输入结束, jackson 无法映射空数组,没有内容可映射到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11189882/
我找不到关于 jackson 的ObjectMapper与其他映射器(例如dozer/mapStruct/modelMapping/etc)之间的区别的任何解释。所有文章都比较了dozer/mapSt
我正在使用Jackson来反序列化Kotlin数据类。我正在使用jackson-kotlin-module,但 jackson 却给我以下错误: Can not construct instance
我正在尝试将包从“com.fasterxml.jackson”重新定位到我自己的包(即“mypackage.com.fasterxml.jackson”),然后在我拥有的另一个 JAR 中使用它。 我
对于JSON对象,Subject: { "permissions":["foo", "bar"], ... } ...我想反序列化为: class Subject { priv
我正在使用 @JsonTypeInfo 和 @JsonSubTypes 来映射基于给定属性的解析子类。这是我想要解析的示例 JSON 的一个人为示例。 { "animals": [ { "
我们正在使用 dropwizard 版本 0.6.3。当我们尝试升级 0.7.0 版本时,我们在服务启动时收到此错误。 线程“main”中的异常 java.lang.VerifyError: clas
我正在尝试实现自定义解串器。因为我只想向默认反序列化器添加功能,所以我尝试在我的自定义反序列化器中存储默认反序列化器:我想使用默认反序列化 json,然后添加其他信息。 我正在尝试使用 BeanDes
我有一个这样的类(class): public class Person { private String name; public String getName(){ return
我有以下 Kotlin 数据类: data class TestObject( val boolField: Boolean, val stringField: Str
使用 Jackson 库,在 Eclipse 4.9.0 版本中出现以下错误 缺少工件 com.fasterxml.jackson.core:jackson-databind:bundle:2.9.6
我试图在我的应用程序中从azure实现keyvault,在为DefaultAzureCredentialBuilder()实现azure-identity:1.5.4 lib后,它会抛出链接错误,如下
我试图在我的应用程序中从azure实现keyvault,在为DefaultAzureCredentialBuilder()实现azure-identity:1.5.4 lib后,它会抛出链接错误,如下
我知道我们可以使用 Jackson MixIn 来重命名属性或忽略属性(参见示例 here )。但是可以添加属性吗? 添加的属性可以是: 一个常数(如版本号) 计算值(例如,如果源类具有 getWid
我有一个在 Wildfly 10 上运行的应用程序,它需要更新版本的 jackson。简单地更新 maven 依赖是行不通的。 Wildflys 自己的版本似乎干扰了... 有人有提示吗? 最佳答案
我在 Tomcat 休息应用程序中运行 Jersey 2.5.1 & Jackson。对于我最初将 POJO 简单地转换为 JSON 的用例,基本设置效果很好。集合很好地转换为 json 数组,如下所
有没有办法告诉 jackson 在序列化过程中忽略那些用非 jackson 注释注释的字段? 例如: @SomeAnnotation private String foo; 我知道有 jackson
我遇到了 jackson 序列化问题, map 中存在空值。显然,这是 Wildfly 9 使用的 Jackson 版本中的一个已知错误 ( https://issues.jboss.org/brow
给定一个像这样的 JSON 映射类: public class Person { @JsonProperty String getName() { ... } @JsonPro
如何让 Jackson 的 XMLMapper 在反序列化时读取根 xml 元素的名称? 我正在将输入 XML 反序列化为通用 Java 类、LinkedHashMap,然后反序列化为 JSON。我想
我对抽象类和 JSON 序列化和反序列化的对象引用有问题。抽象的问题如下所示: 我有一个由节点和边组成的图。每条边连接两个节点。节点可以是红色和绿色的。因此,有一个抽象类Node和两个派生类 RedN
我是一名优秀的程序员,十分优秀!