我试图使用Jackson的数据格式库将足球结果csv反序列化为枚举。这是csv文件(第六列是我感兴趣的那个):
Egypt,Uruguay,GROUP,2,0,HOME
这是我的枚举类:
@JsonIgnoreProperties(ignoreUnknown = true)
public enum MatchOutcome {
HOME(3, 0),
DRAW(1, 1),
AWAY(0, 3),
HOME_ET(1, 1),
AWAY_ET(1, 1),
HOME_PENS(1, 1),
AWAY_PENS(1, 1);
private final Integer homePoints;
private final Integer awayPoints;
MatchOutcome(Integer homePoints, Integer awayPoints) {
this.homePoints = homePoints;
this.awayPoints = awayPoints;
}
public Integer homePoints() {
return this.homePoints;
}
public Integer awayPoints() {
return this.awayPoints;
}
}
这是主要方法:
public static void main(String[] args) throws Exception {
CsvSchema csvSchema = CsvSchema.builder()
.addColumn("HOME")
.addColumn("AWAY")
.addColumn("STAGE")
.addColumn("HOME_FULL_TIME")
.addColumn("AWAY_FULL_TIME")
.addColumn("MATCH_OUTCOME")
.build();
CsvMapper csvMapper = new CsvMapper();
File csvFile = new File("src/Resources/fixtureResult.csv");
MappingIterator<MatchOutcome> matchOutcomeIterator = csvMapper.readerFor(MatchOutcome.class).with(csvSchema)
.readValues(csvFile);
while (matchOutcomeIterator.hasNextValue()) {
MatchOutcome matchOutcome = matchOutcomeIterator.nextValue();
System.out.println(matchOutcomeIterator.toString());
}
}
我收到以下错误:
Exception in thread "main" com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `com.football.Calculator.MatchOutcome` out of START_OBJECT token
我的注释错了吗?或者我的枚举上需要一个toString方法吗?
答案 0 :(得分:0)
我创建了一个包装类并最终映射到它,
@JsonIgnoreProperties(ignoreUnknown = true)
public class MatchOutcomeWrapper {
public MatchOutcome matchOutcome;
public MatchOutcomeWrapper(@JsonProperty("MATCH_OUTCOME") MatchOutcome matchOutcome) {
this.matchOutcome = matchOutcome;
}
public MatchOutcome getMatchOutcome() {
return matchOutcome;
}
public String toString() {
return new ToStringBuilder(this, ToStringStyle.JSON_STYLE)
.append("matchOutcome", matchOutcome)
.toString();
}
}