如何获取具有主机名/ ip休息呼叫的完整请求URL?

时间:2015-03-09 09:28:45

标签: java rest jersey restful-url

我需要获取包含主机名或IP地址的完整网址,这是来自我的休息服务的休息请求。有什么方法可以做到吗?

与InetAddress相似ip = ip.getHostName();在java。

4 个答案:

答案 0 :(得分:0)

使用Jersey可以执行以下操作

String clientHost = req.getRemoteHost(); // req is HttpServletRequest
String clientAddr = req.getRemoteAddr();

答案 1 :(得分:0)

当你说InetAddress ip = ip.getHostName();您将获得运行其他服务的计算机的主机名,以获取发出请求的计算机的名称,您将需要使用类似于request.getRemoteHost();该值可能取决于发起请求的机器的网络环境。

获取完整网址请参阅以下帖子。 What's the best way to get the current URL in Spring MVC?

答案 2 :(得分:0)

使用 CDI @Context ,类似于Ashir Khan above的评论,可以制作requestContext或部分请求上下文在运行时可用。许多类型可以通过 @Context 注释绑定并由容器注入,但最好是:

  1. 尽可能降低注入数据的可见性,即绑定到方法而不是类
  2. 尽可能减少注入的信息量,例如绑定 UriInfo ,如果你想要的只是baseUri而不是完整的请求上下文
  3. 听起来很多,但就像阿什尔的代码一样简单(修改):

    @GET
    @Path("/test") 
    // Look Ma, no hands!
    public Response test(@Context javax.ws.rs.core.UriInfo uriInfo) { 
      return Response.status(Status.OK).entity(uriInfo.getBaseUri()).build();
    }
    

    See also this response

答案 3 :(得分:0)

您可以使用UriInfo类并使用@Context批注将其绑定,然后在每个请求处都可以访问URI信息,例如主机名,端口,请求路径等。

这里是一个例子-

@POST
@Path("/test")
public Response uriTest(@Context UriInfo uriInfo){ //helps you get all URI related information.
    System.out.println(uriInfo.getBaseUri().getHost());
    System.out.println(uriInfo.getBaseUri().getPort());
    return Response.ok(null).build();
}

您可以了解有关URIInfo here

的更多信息