我有一个POJO将读取从卡夫卡消费者的数据。我在它里面有两个列表对象,我无法理解它的空行为。
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;
}因此,我试图检查AssignedWorkEBO中来自kafka的数据是否为空/空条件,并且它的行为是否很奇怪。
打印pojo时,从kafka:{"Employee":{"EmployeeId":"E2212",“assignedWorks”:{}}收到有效载荷
但当我检查是否是空的时,它会抛出飞碟
log.info("employee.getAssignedWorks().isEmpty();" + employee.getAssignedWorks().isEmpty());//false
log.info("employee.getAssignedWorks().size();" + employee.getAssignedWorks().size()); //1因此,理想情况下,是空的,大小是零的。
收到卡夫卡的有效载荷:{“雇员”:{“EmployeeId”:“E2212”,“assignedWorks”:{“assignedWorkId”:“34241”}}这是可以的,因为它有给我正确的值
log.info("employee.getAssignedWorks().isEmpty();" + employee.getAssignedWorks().isEmpty());//false
log.info("employee.getAssignedWorks().size();" + employee.getAssignedWorks().size()); //1但为什么空壳会以价值的形式出现。是不是因为我用过的任何杰克逊注解?
请指教
谢谢
发布于 2021-10-04 14:49:49
你得到的结果是正确的。
对于您的{"EmployeeId":"E2212","assignedWorks":[{}]}}输入json,employee.getAssignedWorks().isEmpty()返回false和employee.getAssignedWorks().size()返回1是正确的。assignedWorks字段是一个包含空对象的json数组,因此它将作为一个包含所有空字段的工作的列表序列化到pojo中的assignedWorks列表中。
https://stackoverflow.com/questions/69434344
复制相似问题