Spring Custom Binder, который разрешает идентификатор, предоставленный в объект POJO из БД - PullRequest
0 голосов
/ 29 мая 2020

У меня есть требование, в котором я должен использовать настраиваемое связующее для разрешения примитивных значений из запроса в извлеченный объект БД. Для чего я написал этот код. Изменив код из 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.

Итак, любой помощь или любой пример по этой проблеме полезны !! Здесь я просто хочу вызвать свою базу данных и получить объект на основе идентификатора, переданного в контроллер. Вот и все !!

Заранее спасибо !!

...