Nat*_*ell 12 spring webcontext spring-hateoas
我们正在构建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请求标头将虚拟主机转发到正确的应用程序.
干杯,非常感谢对此的任何想法
弥敦道
首先,如果您不知道,您可以通过创建webapp/META-INF/context.xml包含以下行的内容来控制 Web 应用程序的上下文(至少在 Tomcat 下):
<Context path="/" />
Run Code Online (Sandbox Code Playgroud)
...这将使应用程序上下文设置为与您正在使用的相同(/)。
然而,这不是你的问题。不久前我提出了类似的问题。因此,据我所知,没有现成的机制可以手动控制生成的链接。相反,我创建了自己的修改版本ControllerLinkBuilder,它使用 中定义的属性构建了 URL 的基础application.properties。如果在应用程序本身上设置上下文不是一个选项(即,如果您在同一个 Tomcat 实例下运行多个版本),那么我认为这是您唯一的选择,如果ControllerLinkBuilder没有正确构建您的 URL。
| 归档时间: |
|
| 查看次数: |
2816 次 |
| 最近记录: |