微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Immutables 反序列化 CSV 文件中的 JSON?

如何解决如何使用 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?