使用jackson定制csv序列化

j13ufse2  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(472)

假设我有以下java类:

public class A {
    @JsonProperty("id")
    String id;

    @JsonProperty("name")
    String name;

    @JsonSerialize(using = PropertiesSerializer.class)
    @JsonUnwrapped
    Properties properties;
}

public class Properties {
    List<Property> properties;
}

public class Property {
    String key;
    String value;
}

class PropertiesSerializer extends JsonSerializer<Properties> {
    @Override
    public void serialize(Properties properties, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) {
        if (properties != null && properties.getProperties() != null) {
            properties.getProperties().forEach(property -> {
                try {
                    jsonGenerator.writeStartObject();
                    jsonGenerator.writeStringField(property.getKey(), property.getValue());
                    jsonGenerator.writeEndObject();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            });
        }
    }
}

我需要的是序列化 Product 对象到csv。当我试着运行它的时候 CSV generator does not support Object values for properties (nested Objects) 错误。添加时 @JsonUnwrappped 注解到较低级别的对象时,我仍然会在某个点上遇到相同的错误。
它不应该忽略所有内容并调用 properties 场?看起来它完全忽略了这个方法。我该怎么修?
顺便说一句,由于xml转换,我无法更改代码结构。
谢谢,

gev0vcfq

gev0vcfq1#

当前代码生成的json如下所示:

{
    "id": "myId",
    "name": "myName",
    {
        "foo": "bar"
    },
    {
        "foo2": "bar2"
    },
    ...
}

我想你只是失踪了 jsonGenerator.writeArrayFieldStart("properties") 在循环和 jsonGenerator.writeArrayEnd() 在循环之后。

相关问题