【问题标题】:CSV Jackson mapper numerical fields into StringCSV杰克逊映射器数值字段转换为字符串
【发布时间】:2021-10-28 19:07:04
【问题描述】:

是否可以使用 jackson 库中的 CsvMapper 在引号之间包装来自 pojo 的数字字段?

public class Pojo{
    public String name;
    public int age;
}

使用 CSVMapper 杰克逊

Pojo pojo = new Pojo();
pojo.name= "Peter";
pojo.age= 22;
final CsvMapper csvMapper = new CsvMapper();
csvMapper.configure(CsvGenerator.Feature.ALWAYS_QUOTE_STRINGS, true);
final CsvSchema schema = csvMapper.schemaFor(Pojo.class).withoutHeader().withQuoteChar(CsvSchema.DEFAULT_QUOTE_CHAR);
final ObjectWriter ow = csvMapper.writer(schema);
 System.out.println(ow.writeValueAsString(pojo))  

我的预期输出是"peter","4",但我得到的是"peter",4:c

【问题讨论】:

    标签: java jackson-dataformat-csv


    【解决方案1】:

    只需添加

    @JsonFormat(shape=JsonFormat.Shape.STRING) 
    

    到你的 pojo 类的 int 字段:

    public class Pojo{
        public String name;
        @JsonFormat(shape=JsonFormat.Shape.STRING) 
        public int age;
    }
    

    它可能看起来很奇怪,因为它是 JSON 注释而不是 CSV,但它足够接近工作

    【讨论】:

    • 它按预期工作感谢您的响应我已被标记为正确因为它很有用,但我想在没有注释的情况下实现结果。使用映射器配置或类似的东西。我有一个 rest api,我想以 json 格式保存数值,但目前要将数据保存到 csv 中,我需要所有字段数字,布尔值。引号之间的字符串等。
    • @AliasCartellano 感谢您的建议,但该功能仅适用于 Json Writer。如果您有一个带有 CSV Writer 的示例,将会很高兴了解如何配置它。我发现此链接与该功能相关 github.com/FasterXML/jackson-dataformats-text/issues/198
    猜你喜欢
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 2017-05-21
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    相关资源
    最近更新 更多