简体   繁体   English

在 Spring Boot 中未调用 Rest Controller 方法

[英]Rest Controller method not getting called in spring boot

I am implementing rest webservice via a spring boot application.我正在通过 Spring Boot 应用程序实现 rest webservice。

POM聚甲醛

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.myCompany</groupId>
    <artifactId>services</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>REST Services</name>
    <description>REST Services</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>   
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

application.properties应用程序属性

server.port=8082
server.contexPath=/services
logging.level.org.springframework.web = DEBUG
logging.level.com.myCompany= INFO
logging.file = ../logs/services.log

Application launcher class应用程序启动器类

@SpringBootApplication
public class Application {

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

Controller控制器

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AccountRestController {

    private static final Logger logger = LoggerFactory.getLogger(AccountRestController.class);

    @RequestMapping(value="/account", method=RequestMethod.GET)
    public void createAccount(){
        logger.info("ACCOUNT METHOD CALLED");
    }
} 

I see Did not find handler method for [/services/account] message in the console when I fire http://localhost:8082/services/account URL in the browser as shown below当我在浏览器中触发http://localhost:8082/services/account URL 时,我在控制台中看到没有找到 [/services/account]消息的处理程序方法,如下所示

2018-02-06 08:30:42.868 DEBUG 7532 --- [http-nio-8082-exec-3] s.w.s.m.m.a.RequestMappingHandlerMapping : Looking up handler method for path /services/account
2018-02-06 08:30:42.868 DEBUG 7532 --- [http-nio-8082-exec-3] s.w.s.m.m.a.RequestMappingHandlerMapping : Did not find handler method for [/services/account]
2018-02-06 08:30:42.869 DEBUG 7532 --- [http-nio-8082-exec-3] o.s.w.s.handler.SimpleUrlHandlerMapping  : Matching patterns for request [/services/account] are [/**]
2018-02-06 08:30:42.869 DEBUG 7532 --- [http-nio-8082-exec-3] o.s.w.s.handler.SimpleUrlHandlerMapping  : URI Template variables for request [/services/account] are {}

I dont see message - ACCOUNT METHOD CALLED in the console meaning controller method is not getting invoked.Can you please let me know why createAccount() method not getting called ?我没有在控制台中看到消息 - ACCOUNT METHOD CALLED 意味着控制器方法没有被调用。你能告诉我为什么 createAccount() 方法没有被调用吗?
Is controller class getting identified/scanned by Spring factory?控制器类是否被 Spring 工厂识别/扫描?
What is causing this error?是什么导致了这个错误?

Please change server.contexPath to server.contextPath . 请将server.contexPath更改为server.contextPath

And try again, it should work as there's no extra config or code is there. 再试一次,它应该工作,因为那里没有多余的config或代码。

http://www.baeldung.com/spring-boot-application-configuration http://www.baeldung.com/spring-boot-application-configuration

  1. Can you help us to capture your project structure? 您能帮助我们掌握您的项目结构吗? AccountRestController should be in the same package (or in sub-package) of Application . AccountRestController应该位于Application的同一程序包(或子程序包)中。 Like this: 像这样: 简单愚蠢的项目结构
  2. Did you check you log file? 您检查过日志文件了吗? Does it has any log? 有日志吗?

Your server.contexPath should be server.contextPath. 您的server.contexPath应该是server.contextPath。 You missed a T in contexPath. 您错过了contexPath中的T。

there is no request mapping in your class level. 在您的课程级别没有请求映射。 After @RestController , There should be @RequestMapping("/services/*) @RestController之后,应该有@RequestMapping(“ / services / *)

看起来您拼写了该属性,它应该是server.contex t路径,而不是您所用的server.contexPath(w / oa't')。

Your controller should be in the same package or in any subpackage of your main SpringBootApplication file.你的控制器应该在你的主SpringBootApplication文件的同一个包或任何子包中。

If you want to include controllers present in either some other package or in a higher level then you can specifically mention that using componentScan annotation.如果您想在其他包或更高级别中包含控制器,那么您可以使用componentScan annotation.特别提及componentScan annotation.

As shown in the below reference image, my login controller is not present in the same or subpackage of StudentServicesApplication.java .如下图所示,我的登录控制器不存在于StudentServicesApplication.java的相同或子包中。 Hence I have specifically mentioned the package name of the controller to be considered using componentScan因此我特别提到了要考虑使用 componentScan 的控制器的包名称

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM