У меня есть требование, в котором я должен использовать настраиваемое связующее для разрешения примитивных значений из запроса в извлеченный объект БД. Для чего я написал этот код. Изменив код из https://www.baeldung.com/spring-mvc-custom-data-binder
@Component
public class StringToAbstractEntityConverterFactory
implements ConverterFactory<String, AbstractEntity>{
@Autowired
private FooRepository fooRepository;
@Autowired
private BarRepository barRepository;
@Override
public <T extends AbstractEntity> Converter<String, T> getConverter(Class<T> targetClass) {
return new StringToAbstractEntityConverter<>(targetClass);
}
private class StringToAbstractEntityConverter<T extends AbstractEntity>
implements Converter<String, T> {
private Class<T> targetClass;
public StringToAbstractEntityConverter(Class<T> targetClass) {
this.targetClass = targetClass;
}
@SuppressWarnings("unchecked")
@Override
public T convert(String source) {
long id = Long.parseLong(source);
if(this.targetClass == Foo.class) {
return (T) fooRepository.findById(id).orElse(null);
}
else if(this.targetClass == Bar.class) {
return (T) barRepository.findById(id).orElse(null);
} else {
return null;
}
}
}
}
Но здесь проблема в том, что fooRepository становится нулевым, из-за чего я получаю NullPointerException.
Итак, любой помощь или любой пример по этой проблеме полезны !! Здесь я просто хочу вызвать свою базу данных и получить объект на основе идентификатора, переданного в контроллер. Вот и все !!
Заранее спасибо !!