【问题标题】:Get current ApplicationPath value in Jersey resource method在 Jersey 资源方法中获取当前 ApplicationPath 值
【发布时间】:2015-12-04 11:08:58
【问题描述】:

我有一个 jersey 2.0 应用程序,它使用带有 freemarker 模板的 mcv。在一个模板中,我有一个表单,其操作是重新提交到相同的 url。假设表单 url 是:

http://my-domain.com/app-base-path/my-form 

所以应用注释是:@ApplicationPath("app-base-path") 资源路径注解为@Path("my-form")。太好了。

我正在尝试将表单操作动态设置为:

<form name="settings" action="${model.formAction}" method="post">

action 应该等于:app-base-path/my-form 我试图通过注入 UriInfo 来设置资源中的值。这就是我得到的:

formAction = uriInfo.getPath();
//result formAction = "my-form"  

如何检索包括 app-base-path 在内的路径? 请不要使用javascript!

【问题讨论】:

    标签: jersey


    【解决方案1】:

    您可以使用uriInfo.getAbsolutePath() 获取绝对URI,这将返回一个URI 以及相应资源方法的完整 URI。

    http://localhost:8080/app-base-path/myform
    

    一个 URI 可以分解成不同的部分,URI 类具有获取这些部分的特定方法

    scheme            authority              path
    --------------------------------------------------------
    http    ://     localhost:8080     /app-base-path/myform
    

    URI 类具有获取所有这些的方法。

    uri.getScheme()
    uri.getAuthority()
    uri.getPath()
    

    我很确定我不需要告诉你你想要哪一个:-)

    【讨论】:

    • 顺便回答一下题主的问题,如果只想app路径,可以使用UriInfo.getBaseUri().getPath()
    • 我可能过度简化了它。我的本地开发 tomcat 托管了几个 Web 应用程序,每个应用程序都有一个基本上下文路径。比如:localhost/app-name/app-base-path/my-form。我只需要与 app-name 相关的部分。
    • UriBuilder.fromPath(uriInfo.getBaseUri().getPath()).path(FormResource.class).build().toString().. 应该可以工作
    • uriInfo.getBaseUriBuilder().path(FormResource.class).build()
    猜你喜欢
    • 2012-09-27
    • 1970-01-01
    • 2013-04-24
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多