如何解决如何使用 Immutables 反序列化 CSV 文件中的 JSON?
我想反序列化 CSV 文件中的 JSON。
Sample CSV:
name;interests
baberiba;{"programming":"java"}
CsvMapper 示例:
public static <T> List<T> loadCsvList(Class<T> type,byte[] fileBytes) {
try {
CsvSchema bootstrapSchema = CsvSchema.emptySchema().withColumnSeparator(';').withHeader();
CsvMapper mapper = new CsvMapper();
mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
mapper.disable(DeserializationFeature.FAIL_ON_UNKNowN_PROPERTIES);
mapper.enable(JsonGenerator.Feature.IGnorE_UNKNowN);
mapper.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS);
MappingIterator<T> readValues = mapper.readerFor(type).with(bootstrapSchema).readValues(fileBytes);
return readValues.readAll();
} catch (ValueInstantiationException error) {
throw new NotValidFlatFileFormatException("The CSV format is not valid",error);
} catch (Exception e) {
throw new BadRequestException("The CSV is not valid",e);
}
}
课程:
@Value.Immutable
@JsonSerialize(as = ImmutablePerson.class)
@JsonDeserialize(builder = ImmutablePerson.Builder.class)
@JsonIgnoreProperties(ignoreUnkNown = true)
@Value.Style(passAnnotations = {JsonProperty.class})
public abstract class Person {
@JsonProperty(value = "name")
public abstract String getName();
@JsonProperty(value = "interests")
public abstract Interests getInterests();
}
@Value.Immutable
@JsonSerialize(as = ImmutableInterests.class)
@JsonDeserialize(builder = ImmutableInterests.Builder.class)
@JsonIgnoreProperties(ignoreUnkNown = true)
@Value.Style(passAnnotations = {JsonProperty.class})
public abstract class Interests {
@JsonProperty(value = "programming")
public abstract String getProgramming();
}
在运行我的 CSV 文件解析时,我得到:
无法构造 com.baberiba.test.ImmutablePerson$Builder
的实例(尽管至少存在一个 Creator):没有从字符串值反序列化的字符串参数构造函数/工厂方法 ('{"programming":"java"}')
我希望映射发生在 CsvMapper 中,而不是发生在任何其他层中。 工作:将兴趣解析为 String 而不是 Interest.class 并执行 JSONparser 以接收对象。
如何在没有 JSONparser 的情况下自定义 CsvMapper 以处理 CSV 中的 JSON?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。