Bean の StringProperty でも同じ問題がありました。@remigio からの回答は、解決策を見つけるのに役立ちました。
そこで、コンバータ ファクトリを追加しました。
public class StringPropertyToStringConverterFactory
implements ConverterFactory<StringProperty, String> {
@Override
public <T extends String> Converter<StringProperty, T> getConverter(final Class<T> type) {
return new StringPropertyToStringConverter<>();
}
private final class StringPropertyToStringConverter<E extends StringProperty, S extends String>
implements Converter<E, S> {
@Override
public S convert(final E s) {
if (s != null) {
return (S) s.getValue();
} else {
return null;
}
}
}
}
public class StringToStringPropertyConverterFactory
implements ConverterFactory<String, StringProperty> {
@Override
public <T extends StringProperty> Converter<String, T> getConverter(final Class<T> type) {
return new StringToStringPropertyConverter<>();
}
private final class StringToStringPropertyConverter<S extends String, E extends StringProperty>
implements Converter<S, E> {
@Override
public E convert(final S s) {
if (s != null) {
return (E) new SimpleStringProperty(s);
} else {
return null;
}
}
}
}
次に、これらのコンバーター ファクトリを Neo4jConfiguration に登録しました。
public class AppConfig extends Neo4jConfiguration {
public AppConfig() {
setBasePackage("org.foo.bar");
addConversionService();
}
private void addConversionService() {
ConversionServiceFactoryBean conversionService = new ConversionServiceFactoryBean();
conversionService.setConverters(
newHashSet(new StringPropertyToStringConverterFactory(),
new StringToStringPropertyConverterFactory()));
conversionService.afterPropertiesSet();
setConversionService(conversionService.getObject());
}
}
私が気に入らないのは、メソッドを呼び出さなければならなかったことafterPropertiesSet()
です。もっとエレガントな方法があるかもしれません。しかし、結局それは機能し、プロパティは保存されます。