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

WildFly 23上部署的Resteasy REST服务调用出现404未找到问题

解决WildFly 23上Resteasy REST服务404错误的方案

梳理代码和配置中可能导致404的问题,以及对应修复步骤:

1. 资源类未被正确注册

你的ApplicationConfig继承了Application但未指定要加载的REST资源类,默认情况下Resteasy不会自动扫描并注册RecipesRestResource,提供两种修复方式:

方式一:手动注册资源类

修改ApplicationConfig,重写getClasses()方法指定要加载的资源:

@ApplicationPath("/api")
public class ApplicationConfig extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> resources = new HashSet<>();
        resources.add(RecipesRestResource.class);
        return resources;
    }
}

方式二:开启自动扫描

如果不想手动注册,可在web.xml的Resteasy Servlet配置中添加自动扫描参数:

<servlet>
    <servlet-name>Resteasy</servlet-name>
    <servlet-class>
      org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
    </servlet-class>
    <init-param>
      <param-name>javax.ws.rs.Application</param-name>
      <param-value>org.vinyls.rest.ApplicationConfig</param-value>
    </init-param>
    <!-- 添加自动扫描参数 -->
    <init-param>
      <param-name>resteasy.scan</param-name>
      <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

若RecipesRestResource不在org.vinyls.rest包或其子包下,还需添加指定扫描包的参数:

<init-param>
  <param-name>resteasy.scan.packages</param-name>
  <param-value>你的资源类所在包路径</param-value>
</init-param>

2. 配置冲突问题

你同时使用了@ApplicationPath("/api")注解和web.xml里的/api/* servlet映射,这在WildFly中可能导致路径冲突,建议二选一:

  • 保留ApplicationConfig的@ApplicationPath注解,删除web.xml中Resteasy的listener、servlet和servlet-mapping配置,WildFly会自动识别JAX-RS应用并处理映射。
  • 保留web.xml配置,删除ApplicationConfig上的@ApplicationPath注解。

3. 其他注意事项

  • 端点路径确认:修复后,正确请求路径应为http://<服务器地址>:<端口>/<应用上下文>/api/recipes,比如应用上下文是myapp时,路径为http://localhost:8080/myapp/api/recipes。
  • 资源类初始化问题:RecipesRestResource中的recipesRequestHandler未初始化,即使端点能被访问,调用时也会抛出空指针异常,需添加初始化代码:
@Path("/recipes")
@Produces("application/json")
public class RecipesRestResource {

    private RecipesRequestHandler recipesRequestHandler;

    // 构造方法初始化
    public RecipesRestResource() {
        recipesRequestHandler = new RecipesRequestHandler();
    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getAllRecipes() {
        List<Recipe> recipes = recipesRequestHandler.getAllRecipes();
        return Response.ok(recipes).build();
    }
}
  • 检查部署日志:查看WildFly的server.log,确认部署过程中无类加载失败、资源注册失败等错误,这类问题也可能导致404。

内容的提问来源于stack exchange,提问作者gilmel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:10:33