0

重複の可能性:
BeanPropertyRowMapper でプロパティのコンバーターを登録する

NamedParameterJdbcTemplate を使用して DB2 を呼び出すと、次の例外が発生します。

例外:

org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.lang.String' to required type 'Gender' for property 'gender'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [Gender] for property 'gender': no matching editors or conversion strategy found

そうは言っても、Gender Formatter と GenderToString および StringToGender コンバーターを登録しようとしました。フォーマッターもコンバーターも機能していないようです。

ところで、XML 構成ではなく、アノテーション付きの Java 構成を使用しています。したがって、WebMvcConfigurerAdapter を拡張する @Configuration アノテーションでマークされたカスタム クラスを使用してこれらを登録しています。また、これらは両方とも、JSP およびコントローラーとの間を行き来するときに完全に正常に機能します。どういうわけか、Spring が DB2 クエリを処理するときに、何かが足りないように感じます。

ウェブ構成:

@Configuration
@EnableWebMvc // This replaces <mvc:annotation-driven />
@NoTrace
public class WebConfig extends WebMvcConfigurerAdapter {

    @Autowired
    private GenderFormatter genderFormatter;

    @Autowired
    private GenderToStringConverter genderToStringConverter;

    @Autowired
    private StringToGenderConverter stringToGenderConverter;

    @Override
    public void addFormatters(final FormatterRegistry registry) {

        registry.addFormatter(this.genderFormatter);
        registry.addConverter(this.genderToStringConverter);
        registry.addConverter(this.stringToGenderConverter);
    }
}

DAO:

@Repository
public class PersonDAO {

    public Person retrieve(final int id) {

        final MapSqlParameterSource paramSource = new MapSqlParameterSource();

        paramSource.addValue("id", id);

        try {
            return this.namedParameterJdbcTemplate.queryForObject(
                RETRIEVE_PRIMARY_INSURED,
                paramSource,
                new BeanPropertyRowMapper<Person>(Person.class));
        } catch (final RuntimeException e) {
                    LOGGER.error("RuntimeException: ", e);
                    throw e;
        }
    }
}

public class Person {

private int id;
private Name name = new PersonName();
private Age age;
private Gender gender;

// getters and setters
}
4

0 に答える 0