Читать строку как Уровень из CSV - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть 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 и т. Д. В перечисления Level.Вот что я попробовал:

 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"])

1 Ответ

0 голосов
/ 23 сентября 2019

В csv после WARN было дополнительное пространство, и я должен обрезать пробелы, используя.

 mapper.enable(CsvParser.Feature.TRIM_SPACES);
...