如何在不使用 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 的方法:
- 在 web.xml 中
- 覆盖 WebApplicationInitializer
- 扩展 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/