Spring Boot не распознает класс MongoDB RestController - PullRequest
0 голосов
/ 03 марта 2020

Я новичок в MongoDB и пытаюсь использовать его с моим приложением SpringBoot. Я следовал своим учебным пособиям онлайн, скачал их код и заставил его выполнить.

Однако по какой-то причине мой проект не может распечатать RequestMappingHandlerMapping: Mapped «{[/ findAllBooks / {id}], методы = [GET]} ”

Мне было интересно, сможет ли кто-нибудь посоветовать мне, если это связано с природой структуры моего проекта. Я не был уверен, сможет ли мой SpringBootMain увидеть мой класс Controller.

Моя структура проекта лучше всего просматривается здесь https://github.com/emuldrew855/backend/tree/A/B-Testing/src/main/java/com/ebay/queens/demo

Мой класс контроллеров

package com.ebay.queens.demo.resource;

@RestController
@RequestMapping("/v2")
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @PostMapping("/AddUser")
    public String saveUser(@RequestBody User user) {
        userRepository.save(user);
        return "Added user with id: " + user.getId();
    }

    @GetMapping("/all")
    public List<User> getAll(){
        List<User> users = this.userRepository.findAll();
        return users;
    }
}

Мой основной класс

package com.ebay.queens.demo;
    @SpringBootConfiguration
    @SpringBootApplication
    public class SpringBootMain implements CommandLineRunner {
        @Autowired
        private TokenUtilityClass tokenUtilityClass;

    @Bean ResourceConfig resourceConfig() {
    return new ResourceConfig().registerClasses(Version1Api.class, Login.class, SignUp.class, Paypal.class); }

    @Override
    public void run(String... args) throws Exception {
        // test.authenticationToken();
    }

    public static void main(String[] args) {
        SpringApplication.run(SpringBootMain.class, args);
    }

}

1 Ответ

1 голос
/ 04 марта 2020

Я выяснил, почему не работает ... Вы используете 2 разных API WebService, которые несовместимы ...

Spring-Boot имеет собственный API для работы с API Rest с аннотацией @RestController , Вам не нужно использовать Glassfish сервер.

Решение # 1

  1. С SpringBootMain удалить @Bean ResourceConfig resourceConfig() {...}. Теперь ваш API /v2 будет работать должным образом.

  2. Ваш API /v1 не будет работать, поскольку использует другую библиотеку. Вам нужно изменить @Path на @GetMapping или @PostMapping и добавить @RestController в свой Version1Api класс.

Solution # 2

Вы игнорируете Собственный API-интерфейс Spring-Boot Rest и реализация Glassfish Server.

  1. Добавление UserController.class ссылки

@ Bean ResourceConfig resourceConfig () {return new ResourceConfig ( ) .registerClasses (Version1Api.class, Login.class, SignUp.class, Paypal.class, UserController.class ); }

Для UserController изменить @RestController на @Path("/v2")
@Path("/v2")
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @POST
    @Path("/AddUser")
    @Produces(MediaType.TEXT_PLAIN)
    public String saveUser(@RequestBody User user) {
        userRepository.save(user);
        return "Added user with id: " + user.getId();
    }

    @GET
    @Path("/all")
    @Produces(MediaType.APPLICATION_JSON)
    public List<User> getAll(){
        List<User> users = this.userRepository.findAll();
        return users;
    }
}

Теперь оба API будут работать как положено

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...