小编dan*_*imo的帖子

使Jackson在JSON中的重复属性上失败

Jackson用来将JSON反序列化为不可变的自定义Java对象。这是课程:

final class DataPoint {
  private final int count;
  private final int lower;
  private final int median;
  private final int upper;

  @JsonCreator
  DataPoint(
      @JsonProperty("count") int count,
      @JsonProperty("lower") int lower,
      @JsonProperty("median") int median,
      @JsonProperty("upper") int upper) {
    if (count <= 0) {
      throw new IllegalArgumentException("...");
    }
    this.count = count;
    this.lower = lower;
    this.median = median;
    this.upper = upper;
  }

  // getters...
}
Run Code Online (Sandbox Code Playgroud)

这是我反序列化的JSON:

{
  "count": 3,
  "lower": 2,
  "median": 3,
  "upper": 4
}
Run Code Online (Sandbox Code Playgroud)

工作正常。现在,我断开JSON,即重复lower属性:

{
  "count": 4, …
Run Code Online (Sandbox Code Playgroud)

java json jackson deserialization

6
推荐指数
1
解决办法
1076
查看次数

使杰克逊在反序列化期间无法将 double 转换为 int

Jackson用来将 JSON 反序列化为不可变的自定义 Java 对象。这是课程:

final class DataPoint {
  private final int count;
  private final int median;

  @JsonCreator
  DataPoint(
      @JsonProperty("count") int count,
      @JsonProperty("median") int median) {
    if (count <= 0) {
      throw new IllegalArgumentException("...");
    }
    this.count = count;
    this.median = median;
  }

  // getters...
}
Run Code Online (Sandbox Code Playgroud)

这是我反序列化的 JSON:

{
  "count": 1,
  "median": 2
}
Run Code Online (Sandbox Code Playgroud)

它工作正常。现在我打破了 JSON,即用median小数替换整数:

{
  "count": 1,
  "median": 0.1
}
Run Code Online (Sandbox Code Playgroud)

现在我得到count == 1, 和median == 0。相反,我希望 Jackson 无法反序列化,因为 JSON 属性的数据类型median …

java json jackson deserialization

4
推荐指数
1
解决办法
4138
查看次数

标签 统计

deserialization ×2

jackson ×2

java ×2

json ×2