Rest控制器方法在弹簧启动时不被调用

时间:2018-02-06 03:21:22

标签: java spring spring-boot spring-restcontroller

我正在通过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

应用程序启动器类

@SpringBootApplication
public class Application {

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

控制器

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

当我在浏览器中触发http://localhost:8082/services/account网址时,我看到在控制台中找不到[/ 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 {}

我没有看到消息 - 在控制台中调用ACCOUNT METHOD意味着控制器方法没有被调用。你能让我知道为什么createAccount()方法没被调用吗?是控制器类被Spring识别/扫描工厂?
造成这个错误的原因是什么?

5 个答案:

答案 0 :(得分:3)

请将server.contexPath更改为server.contextPath

再试一次,它应该可以正常工作,因为那里没有额外的config或代码。

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

答案 1 :(得分:2)

  1. 您能帮助我们捕捉您的项目结构吗? AccountRestController应位于Application的同一个包(或子包中)中。像这样:Simple stupid project structure
  2. 你检查过你的日志文件了吗?它有任何日志吗?

答案 2 :(得分:0)

您的server.contexPath应该是server.contextPath。你在contexPath中错过了一个T.

答案 3 :(得分:0)

您的班级没有请求映射。在 @RestController 之后,应该有 @RequestMapping(&#34; / services / *)

答案 4 :(得分:0)

看起来你错误拼写了这个属性,它应该是server.contex t 路径,而不是像你的情况那样的server.contexPath(没有't')。