You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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>
      
  • 开启组件扫描:你的@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:48:53