使用Jackson忽略JSON数组/集合中的无效对象

时间:2016-07-22 18:15:23

标签: java android json jackson jackson-databind

我使用Jackson反序列化包含自定义对象数组的网络响应。 我使用Builder来实例化那些对象,这些对象负责确保对象有效(需要fieds等等)并在尝试构建无效对象时抛出IllegalStateException。

当我反序列化这些对象的数组时,我希望能够忽略无效的对象,并且仍然返回一个包含有效对象的数组,而不是丢弃所有这些对象。 理想情况下,我想要一个回调或某种错误处理程序,这样我就可以在发生这种情况时进行自定义日志记录。

这是一个简短的例子:

// Deserializing list with invalid object
String json = "[{\"id\":\"123\"}, {}, {\"id\":\"125\"}]";
ObjectMapper mapper = new ObjectMapper();
List<MyObject> objects = mapper.readValue(json, new TypeReference<List<MyObject>>() {});
// This will throw IllegalArgumentException
// How can I make this return [MyObject{id=123}, [MyObject{id=125}] instead?

// Custom Object
@JsonDeserialize(builder = MyObject.Builder.class)
public class MyObject {
  @NonNull
  private final String id;

  private MyObject(@NonNull String id) {
    this.id = id;
  }

 @NonNull
 public String getId() {
    return id;
  }

  public static class Builder {
    private String id;

    @JsonProperty("id")
    public Builder setId(@NonNull String id) {
      this.id = id;
      return this;
    }

    public MyObject build() {
      if (id == null) {
        throw new IllegalStateException("id is null");
      }
      return new MyObject(id);
    }
  }
}

0 个答案:

没有答案