В Spring Boot JPA невозможно вызвать конечную точку внутри кода из другой конечной точки. Автосоединение не работает. Получение нулевого указателя. - PullRequest
0 голосов
/ 10 июля 2020

Нижняя конечная точка работает из swagger

@Autowired
private EventService eventService;

@PostMapping(value = "/searchVolunteersByDistance")
public List<EventsVolunteerDistance> searchVolunteersByDistance(@RequestParam("eventId") long eventId,
            @RequestParam("distanceKm") int distanceInKm) throws Exception {
EventsAddress address5 = eventService.generalEventsRepository.getOne(eventId).getAddress();

Но когда я вызываю ее из

@PostMapping(value = "/searchVolunteersBySkillDistance")
public Map<Long, Long> searchVolunteersBySkillDistance(@RequestParam("eventId") long eventId,
            @RequestParam("mandatoryUserIds") List<Long> mandatoryUserIds,
            @RequestParam("mandatorySkillIds") List<Long> mandatorySkillIds,

            @RequestParam("unavailableUserIds") List<Long> unavailableUserIds,

            @RequestParam("distanceKm") int distanceInKm, @RequestParam("extraMerginPercent") int extraMerginPercent)
            throws Exception {
        Map<Long, Long> userSkillMap = new HashMap<Long, Long>();

        List<EventsVolunteerDistance> obj = new ArrayList<EventsVolunteerDistance>();
        locationSearchEngineController = new LocationSearchEngineController();
        obj = locationSearchEngineController.searchVolunteersByDistance(eventId, distanceInKm);

, я получаю исключение нулевого указателя на

EventsAddress address5 = eventService.generalEventsRepository.getOne(eventId).getAddress();

Поскольку eventService имеет значение null, почему не работает автоматическое подключение?

1 Ответ

2 голосов
/ 10 июля 2020

Вы создали новый экземпляр LocationSearchEngineController в своем методе searchVolunteersBySkillDistance. Поскольку вы создали его сами, экземпляр не управляется Spring и, следовательно, в него автоматически встроены какие-либо зависимости. Чтобы избежать этой проблемы, вам нужно, чтобы Spring вводил экземпляр, а не создавал его самостоятельно.

Не связано с вашей проблемой, когда EventService является null, это необычно для метода (searchVolunteersBySkillDistance в данном случае ) на одном контроллере, чтобы вызвать метод на другом контроллере. Более типичный подход - переместить любые logi c, которые вы хотите использовать между контроллерами, в службу, которая вызывается этими контроллерами.

...