为什么我的 jaxrs API 将应用程序名称作为应用程序路径?

Why my jaxrs APIs has the application name as application path?

我用 rest-easy 和 wildfly 创建了一个简单版本 API,一切正常,但应用程序路径有我的项目名称:

我试图扩展应用程序来设置 @ApplicationPath("/") 但它不起作用,它只允许我在应用程序路径上添加元素
示例:http://localhost:8080/projectName/test/...
如何将应用程序路径设置为根 (/) 并删除 projectName ?


JaxRSActivator class:
@ApplicationPath("/")
public class JaxRSActivator extends Application {

    public JaxRSActivator()
    {
        super();
    }
}

VersionFacade class:
@Path("/version")
@Tags
public interface VersionFacade {
    @GET
    @Produces(TEXT_PLAIN)
    @Operation(summary = "Application version", 
    responses = {
            @ApiResponse(responseCode = "200", 
                    description = "Version number",
                    content = @Content(mediaType = TEXT_PLAIN, schema = @Schema(implementation = String.class)))})
    String getVersion();
}

web.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="3.0"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  
    <!-- public API -->
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>public</web-resource-name>
            <url-pattern>/openapi.json</url-pattern>
            <url-pattern>/version</url-pattern>
        </web-resource-collection>
    </security-constraint>

    <context-param>
        <param-name>resteasy.role.based.security</param-name>
        <param-value>true</param-value>
    </context-param>
</web-app>

打开api-configuration.yaml 文件
openapi: 3.0.0
prettyPrint: true
cacheTTL: 0
openAPI:
    info:
        version: '0.0.1'
        title: API config file

Jboss wildfly 使用 Web 模块名称 (projectName.war) 作为默认上下文根。要设置它,您需要:

  • 在您的 Web 模块中添加 WEB-INF/jboss-web.xml 文件:
    (如果您不将您的应用程序打包到 EAR 文件中)
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="
      http://www.jboss.com/xml/ns/javaee
      http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd">
    <!-- Set context root to / -->
   <context-root>/</context-root>
</jboss-web>
  • 或者在您的 EAR 中添加 META-INF/application.xml 文件:
    (如果您将应用程序打包在 EAR 文件中)
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/application_8.xsd" version="8">
  <display-name>projectName-ear</display-name>
  <module>
    <web>
      <!--My Web module -->
      <web-uri>projectName-ws.war</web-uri>
      <!-- Set context root to / -->
      <context-root>/</context-root>
    </web>
  </module>
  <module>
    <!-- other EJB module -->
    <ejb>projectName-core.jar</ejb>
  </module>
</application>

如果您使用 Eclipse,请注意它有时不会发布您的 application.xml,因此您需要手动将其放入 Wildfly standalone/deployments 文件夹中。