Сериализация вложенных объектов с помощью jackson

#java #serialization #hashmap #jackson

#java #сериализация #hashmap #jackson

Вопрос:

Я хочу иметь вывод, подобный

    { Orga1: [ dep1, dep2], Orga2: [dep88, dep99], ...}
  

но почему-то мне не удается выполнить это должным образом.

У меня есть следующая структура:

 @JsonSerialize(using = OrganisationSerializer.class)
public class Organisation {
    String name;

    private HashMap<String, Department> lstDepartments = new HashMap<>();

    public List<Department> getList() {
        return lstDepartments.values().stream().collect(Collectors.toList());
    }
}
  

с помощью вложенного класса

 @JsonSerialize(using = DepartmentSerializer.class)
public class Department {
    String name;

    HashMap<String, Role4Filter> lstRole = new HashMap<>();

    public List<Role4Filter> getList() {
        return lstRole.values().stream().collect(Collectors.toList());
    }
...
}
  

Основная проблема заключается в том, что HashMap необходимо перенести в List , который необходимо сериализовать. Но почему-то мне не удается правильно преобразовать в JSON.

Мой подход с

 public class OrganisationSerializer extends JsonSerializer<Organisation> {

    @Override
    public void serialize(Organisation value, JsonGenerator gen, SerializerProvider serializers) throws IOException {

    gen.writeStartObject();
    gen.writeArrayFieldStart(value.name);
    for (final Department item : value.getList()) {
        gen.writeObject(item);
    }
    gen.writeEndArray();
    gen.writeEndObject();
}
  

завершается с ошибкой, за исключением того, что

 com.fasterxml.jackson.databind.JsonMappingException: org..Department cannot be cast to org..Organisation
  

Есть идеи? Или возможна какая-то другая аннотация (помимо сериализатора?)

Комментарии:

1. Не ясно, чего вы ожидаете. Не могли бы вы создать пример POJO представления и как оно должно выглядеть после сериализации?

2. как упоминалось во вступлении. Объект с вложенным простым списком имен. Просто простые строки (= name ). Но почему-то я понятия не имею, как перенести Hashmap в один, ArrayList который будет окончательно сериализован.

3. У вас есть два POJO класса: Organisation и Department , и у вас проблема с приведением: «org.. Отдел не может быть приведен к org.. Организация». Итак, нам нужно посмотреть пример, как вы сериализуете эти POJO классы. Не могли бы вы создать простое приложение, которое показывает проблему, прямо сейчас неясно, где именно она появляется.

4. Хм… Исключение возникает в OrganisationSerializer на gen.writeObject(item)