【问题标题】:How can I get root-context url with JAX-RS?如何使用 JAX-RS 获取根上下文 url?
【发布时间】:2016-03-22 09:30:43
【问题描述】:

使用给定的应用程序

@ApplicationPath("/api")
public class MyApplication {
}

UriInfo#getBaseUri 给了我一个应用路径。

@Context
private UriInfo uriInfo

uriInfo.getBaseUri(); // http://address/<context-path>/api

如何获取上下文路径? 如何获取上下文路径的完整 URL?

http://address/<context-path>

更新

我目前使用来自this answer 的代码。

@Context
private HttpServletRequest servletRequest;

final URI contextUri
     = URI.create(servletRequest.getRequestURL().toString())
    .resolve(servletRequest.getContextPath());

还有其他建议吗?

【问题讨论】:

    标签: jax-rs


    【解决方案1】:

    要获取应用程序上下文,您可以在 REST 方法中注入 ServletContext 并从中检索 contextPath,例如:

    @GET
    @Path("/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public Catalog find(@PathParam("id") Long id, @Context ServletContext servletContext) {
        String contextPath = servletContext.getContextPath();
        ...
    }
    

    编辑

    获取您想要的“上下文路径的完整 URL”。您还可以使用 @Context 注释注入 HttpServletRequest 并使用 getScheme()、getServerName() 和 getServerPort() 方法来构建它。

    【讨论】:

    • 对不起,我的意思是 contextPath 的完整 URL。不仅仅是 contextPath。
    【解决方案2】:

    一种可能的方法是使用HttpServletRequest。

    @Context
    private HttpServletRequest servletRequest;
    
    final URI contextUri
         = URI.create(servletRequest.getRequestURL().toString())
        .resolve(servletRequest.getContextPath());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-09
      • 2017-04-23
      • 2014-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多