#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 в виде списка, содержащего одну работу со всеми пустыми полями.