java - jackson 的 ObjectMapper 错误

标签 java json jackson

我有以下类(class):

public class ServletStatus {
    private int ElapsedTime;
    private int TotalBusinessImpressionKeywordFailed;
    private int TotalKeywordStatsFailed;
    private int TotalRecentSearchesFailed;
    private int TotalBusinessImpressionKeywordSaved;
    private int TotalKeywordStatsSaved;
    private int TotalRecentSearchesSaved;

    private String error;

    public String getError() {
        return error;
    }

    public void setError(String error) {
        this.error = error;
    }

    // rest of the getters and setters
}

和以下 JSON:

{"error": "Cannot Accept Request. Servlet has been Shut Down.. "}

我正在尝试按如下方式阅读它:

        ObjectMapper mapper = new ObjectMapper();
        ServletStatus status = mapper.readValue(in, ServletStatus.class);

        String strResult = String.format("ElapsedTime(ms): %d, TotalBusinessImpressionKeywordFailed %d, TotalRecentSearchesFailed %d, TotalKeywordStatsFailed %d, TotalBusinessImpressionKeywordSaved %d, TotalKeywordStatsSaved %d, TotalRecentSearchesSaved %d, Success %s ", 
        status.getElapsedTime(), status.getTotalBusinessImpressionKeywordFailed(), status.getTotalRecentSearchesFailed(), status.getTotalKeywordStatsFailed(), status.getTotalBusinessImpressionKeywordSaved(), status.getTotalKeywordStatsSaved(), status.getTotalRecentSearchesSaved(), status.getError());

我收到以下异常:

java.io.EOFException: No content to map to Object due to end of input
at org.codehaus.jackson.map.ObjectMapper._initForReading(ObjectMapper.java:2775)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2718)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1886)
at nightlybusinessstatsrestart.ShutDownBusinessStatsServlet.showdownServlet(ShutDownBusinessStatsServlet.java:38)
at nightlybusinessstatsrestart.NightlyBusinessStatsRestart.main(NightlyBusinessStatsRestart.java:56)

我做错了什么?我的 JSON 仅包含出现错误的错误字段。但是,成功后,我会得到以下附加字段:

ElapsedTime, TotalBusinessImpressionKeywordFailed, TotalKeywordStatsFailed, TotalRecentSearchesFailed, TotalBusinessImpressionKeywordSaved, TotalKeywordStatsSaved, TotalRecentSearchesSaved;

最佳答案

Jackson 使用所有属性(字段)来生成输出的 json,因此当您尝试为对象 ServletStatus 创建 json 表示形式时,您会发现类似以下内容:

{
  ElapsedTime:"",
  TotalBusinessImpressionKeywordFailed:"",
  TotalKeywordStatsFailed:"",
  TotalRecentSearchesFailed="",
  .
  .
  .
  error:""
}

如果您只想要 json 中的错误,请考虑使用

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)  

或者

public void setSerializationInclusion(JsonSerialize.Inclusion props)
Method that will define global setting of which bean/map properties are to
be included in serialization. 

如果在 json 读取期间未包含属性,请避免失败

objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

关于java - jackson 的 ObjectMapper 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21815261/

相关文章:

Java Native Access 不执行 C++,对吧?

java - 此元素没有附加源,并且在附加的 Javadoc 中找不到 Javadoc

java - Spring Security for Rest @PreAuthorize 500错误

java - 使用用户插件扩展 Java 应用程序

javascript - 使用 moment.js 转换 MongoDate

json - 使用 json 文件中的动态字符串进行 flutter 国际化

c# - System.Runtime.Serialization.Json.DataContractJsonSerializer.WriteObject 在序列化时忽略 NonSerialized 属性

java - 如果未知属性或空属性已作为 json 负载的一部分发送,则在 Spring Boot Rest 中验证 json 负载以抛出错误

java - 使用 jackson 可以吗?

java - 如何基于公共(public)字段使用 Jackson 抽象反序列化不同的枚举类型?