RESTEasy+Seam Maven项目集成Swagger时swagger.json 404求助
排查RESTEasy+Seam项目中Swagger 404无法找到swagger.json的问题
咱们一步步来拆解你遇到的问题,你的配置里有几个关键的错误点,直接导致了swagger.json无法被正常生成或访问:
1. Servlet初始化方法名写错了,根本没执行Swagger配置
你写的public void Init(ServletConfig config)是大写的Init,但Servlet规范里的初始化方法是小写的init,容器根本不会调用这个方法,你的BeanConfig完全没初始化,自然生成不了swagger.json。
修复方法:改成小写init,别忘了调用父类的方法:
@Override public void init(ServletConfig config) throws ServletException { super.init(config); // 必须调用父类初始化方法 BeanConfig beanConfig = new BeanConfig(); beanConfig.setSchemes(new String[] {"http"}); // 后续配置保留,但basePath需要调整(见下方说明) }
2. web.xml里没加Swagger Servlet的URL映射
你只定义了SwaggerConfigurationServlet,但没告诉容器哪些请求要交给这个Servlet处理,相当于这个Servlet根本没对外暴露访问路径。
在web.xml的Servlet定义后面添加这段映射:
<servlet-mapping> <servlet-name>SwaggerConfigurationServlet</servlet-name> <url-pattern>/seam/resource/rest/v3/*</url-pattern> </servlet-mapping>
这里的路径要和你@ApplicationPath("v3")的配置对应上。
3. BeanConfig的basePath配置错误
你把basePath写成了完整的URLhttp://localhost:8080/NameOfProyect/seam/resource/rest,但Swagger的basePath应该是相对于应用上下文的路径,而且要和你的Application路径匹配。
修正成:
beanConfig.setBasePath("/NameOfProyect/seam/resource/rest/v3");
如果你的项目部署在根上下文(访问路径无需加NameOfProyect),就写成/seam/resource/rest/v3。
4. 调整Swagger UI的请求URL
你的index.html里的请求地址要对应上面修正后的路径,改成:
url = "http://localhost:8080/NameOfProyect/seam/resource/rest/v3/swagger.json";
额外需要检查的点
- 确认
beanConfig.setResourcePackage("PackageOfApi");里的包名完全正确,要和你的REST接口所在的包一致(大小写、拼写都不能错),Swagger会扫描这个包下所有带Swagger注解(比如@Api、@ApiOperation)的类。 - 你的REST接口已经添加Swagger注解了吗?如果没加,Swagger扫描不到,也不会生成文档。
- 你用的RESTEasy 2.2.2是非常老的版本,Swagger 1.5.x和它的兼容性可能有小问题,但先把上面的配置错误修复后再测试,如果还是有问题,可以考虑降低Swagger版本到1.3.x试试(优先解决配置问题)。
测试流程
- 重新打包部署项目
- 先直接访问
http://localhost:8080/NameOfProyect/seam/resource/rest/v3/swagger.json,如果能返回JSON格式的文档,说明配置没问题了 - 再打开Swagger UI,应该就能正常加载文档了
内容的提问来源于stack exchange,提问作者Miguel Angel Romalde
相关产品推荐
相关产品推荐

