WildFly默认REST上下文是什么?Spring项目部署404问题排查
排查WildFly上Spring REST API 404问题
我来帮你一步步梳理这个404的问题,结合你描述的细节,先从最可能的点入手:
1. 先搞对WildFly的默认上下文根
你提到部署的WAR模块名为rest_services_war,那WildFly默认会用WAR文件名作为上下文根,而不是你项目里的eventapp。所以正确的访问路径应该是:
localhost:8080/rest_services_war/user
这大概率是你一开始路径写错的原因——别被项目名eventapp误导,WildFly认的是最终部署的WAR文件名。如果想改成eventapp作为上下文根,可以在项目里添加WEB-INF/jboss-web.xml,配置如下:
<jboss-web> <context-root>/eventapp</context-root> </jboss-web>
2. 检查Spring REST的核心配置
你的配置类用了@Configuration和@EnableTransactionManagement,但要让REST请求生效,还缺几个关键配置:
- 添加
@EnableWebMvc注解:这个注解是启用Spring MVC核心功能的开关,没有它,@RequestMapping之类的注解根本不会生效,直接加在你的配置类上就行。 - 确保DispatcherServlet被正确注册:Spring MVC需要DispatcherServlet来接收所有请求并转发给控制器,有两种方式:
- 无XML方式(推荐):写一个实现
WebApplicationInitializer的类,自动注册DispatcherServlet:public class RestAppInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); ctx.register(YourConfigClass.class); // 替换成你的配置类全名 servletContext.addListener(new ContextLoaderListener(ctx)); // 注册DispatcherServlet并映射所有请求 ServletRegistration.Dynamic dispatcher = servletContext.addServlet("restDispatcher", new DispatcherServlet(ctx)); dispatcher.setLoadOnStartup(1); dispatcher.addMapping("/"); } } - 传统web.xml方式:在
WEB-INF/web.xml里配置:<servlet> <servlet-name>restDispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextClass</param-name> <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value> </init-param> <init-param> <param-name>contextConfigLocation</param-name> <param-value>com.your.package.YourConfigClass</param-value> <!-- 你的配置类路径 --> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>restDispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
- 无XML方式(推荐):写一个实现
- 开启组件扫描:你的
@RestController类要被Spring扫描到才行,在配置类上添加@ComponentScan(basePackages = "com.your.package"),把你存放控制器的包路径填进去,不然Spring找不到你的/user映射。
3. 验证WildFly部署状态
- 登录WildFly管理控制台(默认地址
http://localhost:9990),检查rest_services_war是不是成功部署了,有没有红色的错误标记。 - 查看WildFly的日志文件(
standalone/log/server.log),搜索关键词:- 有没有Spring初始化的日志,比如“Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext”
- 有没有加载到你的控制器类,比如“Mapped "{[/user]}" onto public ...”
- 如果有报错,比如类找不到、配置错误,这些都会直接导致REST服务无法启动。
4. 关于@EnableTransactionManagement的说明
这个注解是用来启用Spring事务管理的,和REST请求映射本身没有直接关系,除非你的控制器或服务层因为事务配置错误导致Spring初始化失败,但这时候日志里会有明确的报错信息,优先排查前面的Web配置问题。
先按上面的步骤排查,尤其是第一步的路径问题,大概率能解决你的404问题!
内容的提问来源于stack exchange,提问作者thehespe
相关产品推荐
相关产品推荐

