【问题标题】:Can't get to my spring boot controller methods无法访问我的 Spring Boot 控制器方法
【发布时间】:2016-12-21 23:26:40
【问题描述】:

已经有一段时间了,我正在更新我的 Spring 和 Spring Boot 技能。为此,我正在构建一个 Web 应用程序。这是我的控制器的一部分:

@Controller
public class LoginController {

    @RequestMapping(value = "/validate", method= RequestMethod.GET)
    @ResponseBody
    public String validate( @RequestParam(RequestConstants.KEY_USERKEY) String userkey) {
        String result = loginService.validate(userkey)
                        ? RequestConstants.KEY_SUCCESS
                        : RequestConstants.KEY_FAILURE;

        return result;
    }

部署似乎顺利,战争被命名为theta-server并且正在进入tomcat/webapps OK,所以我去我的浏览器并输入:

http://testbox:8080/theta-server/validate?userkey=bob

我得到一个 404。

我查看日志。最初,我什么都没有,然后我发现了这个问题:Spring Boot War deployed to Tomcat,这使我找到了这些文档:http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file,现在它正在启动 Spring Boot 应用程序,并且横幅显示在我的日志文件中。

但是没有错误,我想知道为什么我会得到 404。

Spring Security 的日志中有消息表明 validate 周围没有控制,所以它似乎正在获取请求,但没有去任何地方。

另外,看到:Spring Boot Controller 404 并确保我的控制器位于我的 Application 类下的包中。

而且我有一个贯穿整个堆栈的集成测试,所以我确信 Spring 的东西至少编码正确。

【问题讨论】:

  • 是否有充分的理由不使用嵌入式容器?不必处理配置外部容器是 Boot 的主要优势之一。
  • @chrylis 不强,不。让我的所有测试实例在我的测试服务器上的一个 tomcat 下运行似乎是个好主意。另一种方法是用我的测试服务器上运行的几个 tomcat 实例交换端口号以进行测试,这是一个旧的、有限的盒子。
  • 请记住,您可以将端口设置为 0 以使其随机化。
  • @chrylis 那如果你不知道端口号是什么,你怎么外部测试呢?
  • 它在启动时打印端口。如果您正在谈论使用外部自动化工具,那么您将生成一个随机端口并将其设置为环境变量(这就是它在 Cloud Foundry 或 Heroku 等设备上的工作方式)。

标签: java spring spring-mvc tomcat spring-boot


【解决方案1】:

我遇到了同样的问题。如下所述,在主类中添加您的控制器包名称。

@SpringBootApplication(scanBasePackages={"com.design.order.controller"}

它为我解决了。

【讨论】:

    【解决方案2】:

    尝试在@Controller下面添加这个

    @RequestMapping(value = "/theta-server")
    

    【讨论】:

      【解决方案3】:

      你能检查一下战争名称吗?我尝试了您在上面发布的相同示例并且工作正常。 以下是我尝试过的,

      @Controller
      public class MyController {
      
          @RequestMapping(value = "/validate", method= RequestMethod.GET)
          @ResponseBody
          public String validate( @RequestParam("userkey") String userkey) {
              System.out.println("in controller..");
              return "";
          }
      
      }
      

      pom.xml

      <groupId>com.org.name</groupId>
          <artifactId>theta-server</artifactId>
          <version>0.1.0</version>
          <packaging>war</packaging>`
      

      网址

       http://localhost:8080/theta-server-0.1.0/validate?userkey=testkey
      

      【讨论】:

        猜你喜欢
        • 2021-03-23
        • 1970-01-01
        • 2016-03-18
        • 2017-03-12
        • 2015-09-27
        • 1970-01-01
        • 1970-01-01
        • 2018-04-17
        • 2019-05-28
        相关资源
        最近更新 更多