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
相关产品推荐
相关产品推荐

