У меня есть 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"])