Null 值被指定为 POJO 中列表的值 SpringBoot/Java

Null Values are assigned as values for a list in POJO SpringBoot/Java

我有一个 POJO 将从 Kafka 消费者读取数据。我里面有几个列表对象,我无法理解它的 Null 行为

EmployeeEBO.java

@Getter
@Setter
@Builder
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
@NoArgsConstructor
@AllArgsConstructor
public class EmployeeEBO implements Serializable {
    private static final long serialVersionUID = 1L;
    private String EmpId;
    private List<AssignedWorkEBO> assignedWorks;

}

AssignedWorkEBO.java

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder(toBuilder = true)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)

public class AssignedWorkEBO{

    private String assignedWorkType;
    private String assignedWorkId;
}

所以我正在尝试检查来自 kafka 的数据是否符合 AssignedWorkEBO 的 Empty/Null 条件并且它的行为很奇怪

打印pojo时 从 kafka 收到有效负载:{"Employee":{"EmployeeId":"E2212","assignedWorks":[{}]}}

但是当我检查 isempty 时它抛出错误

log.info("employee.getAssignedWorks().isEmpty();" + employee.getAssignedWorks().isEmpty());//false
log.info("employee.getAssignedWorks().size();" + employee.getAssignedWorks().size()); //1

所以理想情况下应该是空的,大小为零

从 kafka 收到有效负载:{"Employee":{"EmployeeId":"E2212","assignedWorks":[{"assignedWorkId":"34241"}]}} 这没关系,因为它具有给我正确的值

log.info("employee.getAssignedWorks().isEmpty();" + employee.getAssignedWorks().isEmpty());//false
log.info("employee.getAssignedWorks().size();" + employee.getAssignedWorks().size()); //1

但为什么 Null 会作为值出现。这是因为我使用了任何杰克逊注释吗?

请指教

谢谢

您得到的结果是正确的。

对于你的 {"EmployeeId":"E2212","assignedWorks":[{}]}} 输入 json 是正确的 employee.getAssignedWorks().isEmpty() returns false 和 employee.getAssignedWorks().size() return 1. assignedWorks 字段是一个 json 数组,其中包含一个空对象,因此它将被序列化到您的 pojo 中的 assignedWorks 列表,作为一个包含所有空字段的作品的列表。