#java #csv #jackson #fasterxml
#java #csv #джексон #fasterxml
Вопрос:
Итак, представьте, что у меня есть следующие классы 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 amp;amp; 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.
Спасибо,
Ответ №1:
В настоящее время json, который генерирует ваш код, выглядит примерно так:
{
"id": "myId",
"name": "myName",
{
"foo": "bar"
},
{
"foo2": "bar2"
},
...
}
Я думаю, вам просто не хватает jsonGenerator.writeArrayFieldStart("properties")
перед циклом и jsonGenerator.writeEndArray()
после цикла.