用杰克逊序列化嵌套对象

时间:2019-03-29 13:04:13

标签: java serialization 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

有什么想法吗?还是可能有其他注释(在序列化程序旁边?)

0 个答案:

没有答案