Нулевые значения назначаются в качестве значений для списка в POJO SpringBoot/Java

#java #json #jackson #spring-kafka #json-deserialization

Вопрос:

У меня есть 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;
}
 

Поэтому я пытаюсь проверить, являются ли данные из кафки пустым/нулевым условием для назначенной рабочей группы, и это ведет себя странно

При печати pojo Получена полезная нагрузка от кафки: {«Сотрудник»:{«Идентификатор сотрудника»:»E2212″,»Назначенные работы»:[{}]}}

Но когда я проверяю, пусто ли, это выбрасывает ошибки

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

таким образом, это должно быть идеально верно для пустого и нулевого размера

Полученная полезная нагрузка от кафки: {«Сотрудник»:{«Идентификатор сотрудника»:»E2212″,»Назначенный рабочий»:[{«Назначенный рабочий идентификатор»:»34241″}]}} это нормально, так как у него есть значения, которые он дает мне правильно

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

Но почему значение Null является значением. Это связано с какими-либо аннотациями Джексона, которые я использовал ?

Пожалуйста, посоветуйте

Спасибо

Ответ №1:

Результат, который вы получили, верен.

Для вашего {"EmployeeId":"E2212","assignedWorks":[{}]}} входного json правильно, что employee.getAssignedWorks().isEmpty() возвращает false и employee.getAssignedWorks().size() возвращает 1. assignedWorks Поле представляет собой массив json, содержащий пустой объект, поэтому оно будет сериализовано в assignedWorks список в вашем pojo в виде списка, содержащего одну работу со всеми пустыми полями.