Как создать (работающий) пользовательский конвертер с opencsv - PullRequest
1 голос
/ 17 июня 2019

Я использую OpenCSV со структурой вложенных бинов.Тем не менее, мне нужен собственный конвертер, чтобы справиться с этим (в настоящее время основное внимание уделяется записи в csv).Я осмотрелся, но не нашел примеров, которые бы помогли мне понять, как заставить его работать.

Я пытался расширить мой дочерний класс бобов, и некоторые преобразования приведены в основной документации.Но у меня закончились источники, самое дальнее, что я получил, - это заставить CsvBadConverterException.

Позвольте мне показать вам, что у меня есть.(И пользователь, и UserScore реализуют Serializable, на всякий случай, если это помогает.) Родительский компонент: пользователь

    @CsvBindByName(column = "username")
    private String userName;
    @CsvBindByName(column = "password")
    private String userPassword;
    @CsvBindByName(column = "rememberPassword")
    private boolean rememberPassword;
    @CsvBindByName(column = "rememberUser")
    private boolean rememberUser;
    @CsvCustomBindByName(column = "scores", converter = UserScoreToBean.class)
    private UserScore userScore;

    // Constructors, getters, setters, and other methods

Дочерний компонент: UserScore

    @CsvBindByName(column = "totalScore")
    private int totalScore;
    @CsvBindByName(column = "currentScore")
    private int currentScore;
    @CsvBindByName(column = "highestStreak")
    private int highestStreak;

    // Even more basic getter, setter, etc.

Конвертер: UserScoreToBean

    public abstract class UserScoreToBean extends AbstractBeanField<User> {
    @Override
    protected Object convert(String s) {
        UserScore score = new UserScore();
        String[] split = s.split(".", 3);
        score.setTotalScore(Integer.valueOf(split[0]));
        score.setCurrentScore(Integer.valueOf(split[1]));
        score.setHighestStreak(Integer.valueOf(split[2]));
        return score;
//        return null;
    }

    @Override
    protected String convertToWrite(Object value) throws CsvDataTypeMismatchException, CsvRequiredFieldEmptyException {
        UserScore score = (UserScore) value;

        return "\"" + score.getTotalScore() + "." + score.getCurrentScore() + "." + score.getHighestStreak() + "\"";
//        return super.convertToWrite(value);
    }
    }

Как вы можете видеть, мой конвертер чертовски прост.Так что я буду рад любой помощи, которую вы можете оказать.Для простоты устранения неполадок я только что заставил мою программу попытаться сгенерировать заголовок при запуске, который дает мне следующее исключение:

com.opencsv.exceptions.CsvBadConverterException: возникла проблема при создании экземпляра пользовательского преобразователя settings.user..UserScoreToBean.

Спасибо за чтение!

...