java - Spring Boot 无法识别 MongoDB RestController 类

标签 java mongodb spring-boot

我是 MongoDB 新手,我正在尝试将它与我的 SpringBoot 应用程序一起使用。我已经按照我的在线教程下载了他们的代码并执行了它。

但是,无论出于何种原因,我的项目无法打印出来 RequestMappingHandlerMapping :映射“{[/findAllBooks/{id}],methods=[GET]}”

我想知道是否有人能够给我建议,如果这是由于我的项目结构的性质造成的。 我不确定我的 SpringBootMain 是否可以看到我的 Controller 类。

在这里可以最好地查看我的项目结构 https://github.com/emuldrew855/backend/tree/A/B-Testing/src/main/java/com/ebay/queens/demo

我的 Controller 类

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);
    }

}

最佳答案

我已经弄清楚为什么不起作用...您正在使用 2 个不兼容的不同 WebService API...

Spring-Boot 具有 native API,可通过 @RestController 注释与 API Rest 配合使用。您不需要使用 Glassfish 服务器。

解决方案#1

  1. SpringBootMain 中删除 @Bean ResourceConfig resourceConfig() {...}。现在,您的 API /v2 将按预期工作。

  2. 您的 API /v1 将无法工作,因为它使用其他库。您需要将 @Path 更改为 @GetMapping@PostMapping 并将 @RestController 添加到您的 Version1Api 中 类。

解决方案#2

您忽略 Spring-Boot native Rest API 并实现 Glassfish 服务器。

  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 都将按预期工作

    关于java - Spring Boot 无法识别 MongoDB RestController 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60514679/

    相关文章:

    java - 从 XML 文档获取节点

    java - Log4j 在基类中创建日志实例

    javascript - 从 html 接收的值更改为在 Node.js 中添加 "\u001c"。如何解决?

    node.js - MongoError : Topology is closed, 请连接

    java - 如何在 Android 中从字符串替换 <img> 标签的 src 属性

    java - 避免多重if的设计模式

    c# - 表达式树 mongodb linq 不支持 AsQueryable 方法

    spring-boot - Spring Boot Integration Test 在使用 Hibernate Search 时由于 lucene lock 而失败

    spring-boot - Spring启动登录mysql数据库

    java - 是否可以要求 junit 在进行测试之前运行处方?