BeanPropertyRowMapper выбрасывает org.springframework.beans.TypeMismatchException, хотя setPrimitivesDefaultedForNullValue (true) - PullRequest
1 голос
/ 10 апреля 2019

В моем приложении Spring Batch я читаю таблицу базы данных и сопоставляю ее с dto. У моего dto есть несколько полей типа boolean.

Мой метод Dto и метод dao выглядят следующим образом:

public class MyDto {

    private long id;
    private String yyy;
    private boolean xxx;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getYyy() {
        return id;
    }

    public void setYyy(String yyy) {
        this.yyy = yyy;
    }

    public boolean getXxx() {
        return xxx;
    }

    public void setXxx(boolean xxx) {
        this.xxx = xxx;
    }
}

@Override
public MyDto readMyDto(String id) {  
    SqlParameterSource paramMap = new MapSqlParameterSource(ID, id);
    BeanPropertyRowMapper<MyDto > rowMapper = new BeanPropertyRowMapper<>(MyDto.class);
    rowMapper.setPrimitivesDefaultedForNullValue(true);
    try {
        return this.jdbcTemplateStpl.queryForObject(LESE_KRAFTST_STEUERFALL, paramMap, rowMapper);
    } catch (EmptyResultDataAccessException e) {
        return null;
    }
}      

Я получаю Caused by: java.lang.IllegalArgumentException: Cannot convert value of type [null] to required type [boolean] for property 'xxx', хотя я установил setPrimitivesDefaultedForNullValue на true.

В моем UnitTests он работает правильно, даже с исключением. Когда я установлю setPrimitivesDefaultedForNullValue на false, тесты не пройдут, как ожидалось, с Caused by: java.lang.IllegalArgumentException: Cannot convert value of type [null] to required type [boolean] for property 'xxx'.

Является ли это исключение с setPrimitivesDefaultedForNullValue, установленным на true, ошибкой на моей стороне или Spring Batch, или это поведение ожидается, и BeanPropertyRowMapper перехватывает исключение и в данном случае по умолчанию принимает значение от нуля до false (логическое значение)?

1 Ответ

1 голос
/ 10 апреля 2019
Your method..  
public void setId(boolean xxx) {
        this.xxx = xxx;
    }

should be
public void setXxx(boolean xxx) {
        this.xxx = xxx;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...