Сериализация вложенных объектов с Джексоном - PullRequest
0 голосов
/ 29 марта 2019

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

   { 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

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

...