java - 由于输入结束 jackson 解析器,没有要映射的内容

标签 java android json jackson

我从服务器收到此响应 {"status":"true","msg":"success"}

我正在尝试使用 Jackson 解析器库解析这个 json 字符串,但不知何故我正面临映射异常声明

com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
 at [Source: java.io.StringReader@421ea4c0; line: 1, column: 1]

为什么会出现这种异常?

如何理解是什么导致了这个异常?

我正在尝试使用以下方式解析:

StatusResponses loginValidator = null;

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(Feature.AUTO_CLOSE_SOURCE, true);

try {
    String res = result.getResponseAsString();//{"status":"true","msg":"success"}
    loginValidator = objectMapper.readValue(result.getResponseAsString(), StatusResponses.class);
} catch (Exception e) {
    e.printStackTrace();
}

StatusResponse 类

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({ "status","msg" })
public class StatusResponses {

    @JsonProperty("status")
    public String getStatus() {
        return status;
    }

    @JsonProperty("status")
    public void setStatus(String status) {
        this.status = status;
    }

    @JsonProperty("msg")
    public String getMessage() {
        return message;
    }

    @JsonProperty("msg")
    public void setMessage(String message) {
        this.message = message;
    }

    @JsonProperty("status")
    private String status;

    @JsonProperty("msg")
    private String message;

    private Map<String, Object> additionalProperties = new HashMap<String, Object>();

    @JsonGetter
    public Map<String, Object> getAdditionalProperties() {
        return additionalProperties;
    }

    @JsonSetter
    public void setAdditionalProperties(Map<String, Object> additionalProperties) {
        this.additionalProperties = additionalProperties;
    }
}

最佳答案

import com.fasterxml.jackson.core.JsonParser.Feature;
import com.fasterxml.jackson.databind.ObjectMapper;

StatusResponses loginValidator = null;

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(Feature.AUTO_CLOSE_SOURCE, true);

try {
    String res = result.getResponseAsString();//{"status":"true","msg":"success"}
    loginValidator = objectMapper.readValue(res, StatusResponses.class);//replaced result.getResponseAsString() with res
} catch (Exception e) {
    e.printStackTrace();
}

不知道它是如何工作的以及为什么工作? :(但它有效

关于java - 由于输入结束 jackson 解析器,没有要映射的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26925058/

相关文章:

java - 跟踪 Spring Web 应用程序上的用户 Activity

java - 为多个平台开发

Android 向进度条或其他内容报告媒体播放器当前位置

java - 如何使用 Jackson 解析大型嵌套 JSON 文件?

javascript - 正确转义 javascript 对象

javascript - 通用深层嵌套数组的 Json 到 CSV 转换的通用方法

java - 将 ImageView 高度设置为宽度的 50%

java - Spring Integration、JMS 入站 channel 适配器和事务

android - 媒体路由器 : Detecting a chromecast device when using ActionBarSherlock?

java - 当计算的字符串包含重音字符时,校验和不匹配