IntelliJ Spring Gradle 项目注释不工作

IntelliJ Spring Gradle Project Annotations Not Working

所以我尝试在项目配置设置中使用 Spring 选项在 IntelliJ 中启动一个新的 Web 项目,但是当我最终完成项目设置时,似乎我制作了任何新控制器即使我注释它们也会被忽略。 @RequestMapping 似乎永远不会被映射。我所能访问的只是位于 web 目录根目录中的文件。

在无法让它工作之后,我切换到 Gradle 这样我就可以导入一些额外的库来测试我的项目。我的 gradle 文件如下所示:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.2.RELEASE")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'

sourceSets {
    main {
        java {
            srcDirs = ['src/main/java']
        }
    }
    test {
        java {
            srcDirs = ['src/main/test']
        }
    }
}

jar {
    baseName = 'gs-rest-service'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
}

sourceCompatibility = 1.7
targetCompatibility = 1.7

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile("junit:junit")
    testCompile "org.mockito:mockito-core:1.+"
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.3'
}

我是否需要填写某种配置文件来告诉项目在哪里寻找控制器,或者精灵尘埃是否没有像我预期的那样工作?

这是我的控制器的样子:

@RestController
public class GreetingController {
    public static final String greeting = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @RequestMapping("/greeting")
    public Greeting greeting(@RequestParam(value="name", defaultValue = "World") String name){
        return new Greeting(counter.incrementAndGet(), String.format(greeting, name));
    }
}

并且用@Spring注释的classBootApplication:

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

我的文件夹结构:

Test
- .gradle
- .idea
- build
- gradle
- out
- src
  - main
    - java
      - controllers
        - Application.java
        - GreetingController.java
    - test
- web
  - WEB-INF
    - (empty)

此时我对 Spring 的工作方式感到非常困惑,因为注释尚未发挥作用。我缺少配置文件吗? Spring 入门教程说我不需要,但可能是因为我使用的是 IntelliJ。

最后一件事要注意的是,我 运行 使用本地 Tomcat 实例。

谢谢大家!

如果您在 Tomcat 中部署应用程序,则必须创建一个 class 扩展 SpringBootServletInitializer 以启动 Spring 容器。仅当您 运行 带有 java -jar yourfile.jar 的 JAR/WAR 和嵌入的 Tomcat(其中默认包含在 Spring Boot Starter Web 中)。

查看文档:http://docs.spring.io/spring-boot/docs/1.2.3.RELEASE/reference/htmlsingle/#howto-create-a-deployable-war-file