Джексон десериализуется из CSV в Enum - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь десериализовать csv результатов футбола в enum, используя библиотеку данных формата Джексона. Это CSV-файл (интересует шестой столбец):

Egypt,Uruguay,GROUP,2,0,HOME

Это мой enum класс:

@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 в моем Enum?

1 Ответ

0 голосов
/ 06 мая 2018

Я создал класс-оболочку и в конце сопоставил его с

@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();
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...