java - 没有 Spring Boot 的带有 Gradle 的 Spring Rest Hello World 应用程序

标签 java spring rest tomcat

如何在不使用 Spring Boot 的情况下使我的 Spring Rest HelloWorld 应用正常运行?

在 eclipse 中的 tomcat 8.5 中运行此项目时,我希望 url“localhost:8080/hello”显示“HelloWorld”,但它却显示 404

src/main/java/com.package/HelloController.java

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String helloWorld() {
        return "Hello World";
    }

}

src/main/java/com.package/HelloConfig.java

public class HelloConfig {

    @Bean
    public HelloController helloController() {
        return new HelloController();
    }

    public static void main(String[] args) {
        ConfigurableApplicationContext context = new AnnotationConfigApplicationContext(HelloConfig.class);
        context.getBean(HelloController.class);
    }
}

构建.gradle

plugins {
    id 'java'
    id 'war'
    id 'eclipse-wtp'
}

dependencies {
    compile 'org.springframework:spring-context:5.0.3.RELEASE'
    compile 'org.springframework:spring-web:5.0.3.RELEASE'
    testCompile 'junit:junit:4.12'
}

repositories {
    mavenCentral()
}

最佳答案

回答我自己的问题:缺少的部分是 DispatcherServlet,负责将 http 请求委托(delegate)给 Controller 的逻辑,例如我示例中的 HelloController。

基于 Spring 文档(https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-servlet),有 3 种配置 DispatcherServlet 的方法:

  1. 在 web.xml 中
  2. 覆盖 WebApplicationInitializer
  3. 扩展 AbstractAnnotationConfigDispatcherServletInitializer(推荐用于像我这样具有基于 Java 配置的应用)

src/main/java/com.package/ServletInitializer:

public class ServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[] { HelloConfig.class };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
}

注意:为什么反对票?

关于java - 没有 Spring Boot 的带有 Gradle 的 Spring Rest Hello World 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49154810/

相关文章:

java - 如何使用 Java 中的 FTP 在大型机上创建数据集

java - 如何防止某些包在 ArchUnit 中使用 spring?

web-services - REST 服务中的 session

python - django rest framework 没有身份验证没有权限

java - 正则表达式匹配url

java - 创建两种接受数字作为参数的方法,一种是对数字进行平方,另一种是对数字进行立方

java - Activity 背景音频

java - Java 测试时间。更改 spock stub 值

java - RestController 的 Junit - 断言错误

java - 当我们有Rest API来调用不同的应用程序时,为什么还要使用jitterbit或informatica等集成工具?