0

我有一个如下所示的 csv:

code         ,level,name        ,description
COM-0001,ERROR,Invalid Name,Name can not have digits
COM-0002,WARN ,Unusual Name,Name - {} was unusual
...

我想将第二个(级别)值读取为 org.slf4j.event.Level 。我正在使用 jackson-dataformat-csv 库,但找不到将字符串 ERROR、WARN 等反序列化为级别枚举的示例。这是我尝试过的:

 public static <T> List<Error> loadErrors() {
        try {
            CsvSchema bootstrapSchema = CsvSchema.emptySchema().withHeader();
            CsvMapper mapper = new CsvMapper();
            File file = new ClassPathResource(errorFileName).getFile();
            MappingIterator<Fault> readValues =
                    mapper.readerFor(Error.class).with(bootstrapSchema).readValues(file);
            return readValues.readAll();
        } catch (Exception e) {
            logger.error("Error occurred while loading errorlist from file " + faultFileName, e);
            return Collections.emptyList();
        }
    }

我的错误 POJO 如下:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Error{
    @Id
    @JsonProperty
    private String code;
    @JsonProperty
    private String name;
    @JsonProperty
    private String description;
    //@JsonDeserialize(using = LevelConverter.class)
    @JsonProperty
    private Level level;

    public ERROR() {
    }

    public Error(String code, String name, String description, Level level) {
        this.code = code;
        this.name = name;
        this.description = description;
        this.level = level;
    }

但我收到以下 JsonMappingException

com.fasterxml.jackson.databind.JsonMappingException: No enum constant org.slf4j.event.Level.WARN 
 at [Source: (com.fasterxml.jackson.dataformat.csv.impl.UTF8Reader); line: 3, column: 15] (through reference chain: my.package.model.Error["level"])
4

1 回答 1

0

csv 中的 WARN 之后有额外的空间,我必须使用修剪空间。

 mapper.enable(CsvParser.Feature.TRIM_SPACES);
于 2019-09-23T16:54:17.893 回答