我正在使用 Jackson 反序列化包含自定义对象数组的网络响应。我使用 Builder 来实例化这些对象,它负责确保对象有效(存在必需的字段等)并在尝试构建无效对象时抛出 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);
}
}
}