【问题标题】:Spring REST Controller not mappedSpring REST 控制器未映射
【发布时间】:2016-10-20 18:42:10
【问题描述】:

我正在尝试创建一个监听“/login”的 Rest 控制器我已经定义了下面的代码,但是当我打开 http://localhost:8080/login 时出现 404 错误... 请帮忙:)

这是我的包结构:

com.my.package
   |_ Application.java
   |_ controller
          |_ LoginController

我的申请:

@ComponentScan("com.my.package.controller")
@SpringBootApplication
public class Application {
    public static void main(String[] args){
        SpringApplication.run(Application.class, args);
    }
}

我的 Rest 控制器:

@RestController
public class LoginController {

    @RequestMapping("/login")
    public @ResponseBody String getLogin(){
        return "{}";
    }
}

【问题讨论】:

  • stackoverflow 中的拼写错误 -_-"
  • 你的Application 类需要@Configuration(或将所有注释换成@SpringBootApplication)。
  • 我已经尝试过@SpringBootApplication 但没有:/
  • 所有东西都在什么包里?您能否在日志中确认是否正在注册 /login 的映射?
  • 我已经编辑了我的包结构

标签: java spring rest controller


【解决方案1】:

控制器类应该在Application类的文件夹或者下层文件夹中。

所以,如果应用程序类在包com.company.app中,那么控制器类应该在包com.company.appcom.company.app.*.中假设控制器类在com.company.controller中,它不会被映射,因为它不是在应用程序类的同一个包或子包中。

【讨论】:

    【解决方案2】:

    你应该在你的 springBoot 应用的 init 类中使用这个注解

    @Configuration
    @EnableAutoConfiguration
    @ComponentScan("com.my.package")
    public class WebAppInitializer{
    
        public static void main(String[] args) throws Exception{
            SpringApplication.run(WebAppInitializer.class, args);
        }
    

    }

    【讨论】:

    • 这不起作用:/我确定我还缺少其他东西:/
    • 那些注解完全等同于@SpringBootApplication
    • 还有其他建议吗?
    • 花了我一整天的时间才意识到我的控制器包名称是“controller”而不是“com.my.controller”。 @ComponenetScan("controller") 解决了我的问题。
    【解决方案3】:

    有时,当映射不工作的原因毫无意义时,只需将服务器端口更改为与 8080 不同的端口即可。

    即。在 application.properties 或 yml 中,server.port=8081

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 2019-03-04
      • 2019-05-25
      • 1970-01-01
      • 2019-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多