我们正在构建API并使用Spring RestControllers和Spring HATEOAS.
将war文件部署到容器并发出GET请求时http://localhost:8080/placesapi-packaged-war-1.0.0-SNAPSHOT/places,HATEOAS链接如下所示:
{
"links" : [ {
"rel" : "self",
"href" : "http://localhost:8080/placesapi-packaged-war-1.0.0-SNAPSHOT/places",
"lastModified" : "292269055-12-02T16:47:04Z"
} ]
}
Run Code Online (Sandbox Code Playgroud)
在网络方面是,部署的应用程序(如:placesapi-packaged-war-1.0.0-SNAPSHOT)
在真实的运行时环境(UAT及更高版本)中,容器可能位于http服务器后面,例如Apache虚拟主机或类似的Web应用程序.像这样的东西:
<VirtualHost Nathans-MacBook-Pro.local>
ServerName Nathans-MacBook-Pro.local
<Proxy *>
AddDefaultCharset Off
Order deny,allow
Allow from all
</Proxy>
ProxyPass / ajp://localhost:8009/placesapi-packaged-war-1.0.0-SNAPSHOT/
ProxyPassReverse / ajp://localhost:8009/placesapi-packaged-war-1.0.0-SNAPSHOT/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
使用上面的内容,当我们发出GET请求时http://nathans-macbook-pro.local/places,结果响应如下所示:
{
"links": [ {
"rel": "self",
"href": "http://nathans-macbook-pro.local/placesapi-packaged-war-1.0.0-SNAPSHOT/places",
"lastModified": "292269055-12-02T16:47:04Z"
} ]
}
Run Code Online (Sandbox Code Playgroud)
这是错误的,因为响应中的链接包含Web应用程序上下文,如果客户端要关注该链接,他们将获得404
有谁知道如何控制Spring HATEOAS这方面的行为?基本上我需要能够控制它在链接中生成的Web上下文名称.
我做了一些调整,可以看到使用自定义标头,X-Forwarded-Host您可以控制主机和端口,但我看不到任何类似的能够控制上下文.
我们考虑的其他选项涉及将应用程序部署到ROOT上下文或固定的命名上下文,然后相应地设置我们的虚拟主机.然而,这些感觉就像妥协而不是解决方案,因为理想情况下我们希望在同一容器上托管应用程序的多个版本(例如:placesapi-packaged-war-1.0.0-RELEASE,placesapi-packaged-war-1.0.1- RELEASE,placesapi-packaged-war-2.0.0-RELEASE等)并根据http请求标头将虚拟主机转发到正确的应用程序. …
当我们在eclipse中移动到Wildfly 8.x服务器时,我遇到了一个新问题.
我的项目名为PayloadSvc.pom.xml的第一部分如下所示:
<modelVersion>4.0.0</modelVersion>
<groupId>PayloadSvc</groupId>
<artifactId>PayloadSvc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
Run Code Online (Sandbox Code Playgroud)
后来在pom我有这个:
<build>
<finalName>PayloadSvc</finalName>
Run Code Online (Sandbox Code Playgroud)
在eclipse中,我还在Web项目设置中将我的上下文根设置为PayloadSvc
但是,当它部署到Wildfly时,它会以这种方式部署:
Registered web context: /PayloadSvc-0.0.1-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)
我似乎无法删除Web上下文的"-0.0.1-SNAPSHOT"部分.
奇怪的是,即使使用相同的pom数据(具有适当的上下文,groupId,工件ID和当然相同的版本属性),同一工作区中的其他项目也能正常工作.
我正在使用Eclipse Neon的STS版本.
感谢您提出的任何建议.
我们希望在Tomcat,WebLogic,WebSphere和JBoss上部署我们的应用程序.我们的应用程序的web.xml需要包含到默认servlet的映射.
对于Tomcat,这个servlet被命名为"default",因此我们的映射将显示为:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/js/calendar/flexcal.html</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
但在其他平台上它会发生变化(即WebLogic是"FileServlet").
有没有办法定义一个条件映射,它将根据可用的内容而改变?如果不是,我们应该如何处理这个问题?
谢谢!