为什么我的 jaxrs API 将应用程序名称作为应用程序路径?
Why my jaxrs APIs has the application name as application path?
我用 rest-easy 和 wildfly 创建了一个简单版本 API,一切正常,但应用程序路径有我的项目名称:
我的版本 API return 我的版本号 pom.xml
: URI 应该是 http://localhost:8080/version
但要访问它,这是 http://localhost:8080/projectName/version
.
要访问打开的 api 文件:URI 应该是 http://localhost:8080/openapi
但这是 http://localhost:8080/projectName/openapi
我试图扩展应用程序来设置 @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
文件夹中。
我用 rest-easy 和 wildfly 创建了一个简单版本 API,一切正常,但应用程序路径有我的项目名称:
我的版本 API return 我的版本号
pom.xml
: URI 应该是http://localhost:8080/version
但要访问它,这是http://localhost:8080/projectName/version
.要访问打开的 api 文件:URI 应该是
http://localhost:8080/openapi
但这是http://localhost:8080/projectName/openapi
我试图扩展应用程序来设置 @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
文件夹中。