Доступ к классам контроллера Spring Boot / MongoDB из других классов - PullRequest
0 голосов
/ 13 апреля 2020

Я делаю REST API с Spring Boot и MongoDB в Java.

У меня есть, например, класс Location с соответствующими классами LocationRepository и LocationController. Чтобы получить доступ к базе данных Location (LocationRepository), мне нужно сделать это через LocationController (насколько я знаю). У меня есть функции в этом контроллере, которые выполняются по запросам POST / GET, и он прекрасно работает при отправке запросов с внешнего сервера (Nuxt. js w / Ax ios) или просто через Insomnia / Postman.

Однако, если я не хочу получать доступ к базе данных местоположений из бэкэнда и из другого класса в моей программе, я не уверен, как это сделать. Я полагаю, мне либо нужно отправлять запросы API локально, либо мне нужно получить фактический экземпляр моего LocationController для запуска функций на нем.

Является ли отправка запросов API локально, как эта плохая практика?

Могу ли я как-нибудь получить экземпляр моего LocationController? Все это управляется через Spring, который, я полагаю, где-то создает контроллеры, но я не знаю, где и как их захватить.

Вот пример одного из моих контроллеров:

@RestController
@RequestMapping("api/locations")
public class LocationController {
    @Autowired
    private LocationRepository repository;

    @RequestMapping(value = "/all", method = RequestMethod.GET)
    public List<Location> getAllLocations(@RequestBody String body) {
        return repository.findAll();
    }

}

Цените любую помощь!

РЕДАКТИРОВАТЬ: Использование @Autowired LocationController locationController в любом классе, которому необходим доступ к этому, похоже, работает.

1 Ответ

0 голосов
/ 13 апреля 2020

Вам не нужно создавать экземпляр вашего контроллера, ваш репозиторий отвечает за выборку данных из базы данных. Вы можете сделать то же самое, что вы делаете внутри вашего контроллера:

public class MyGreatClass{
    @Autowired
    private LocationRepository repository;
    public void myGreatMethod() {
        List<Location> locations = repository.findAll();
        // Do the stuff with location
    }
...