如何通过休息电话的 host-name/ip 获得完整请求 URL?
How do I get the full request URL with host-name/ip of a rest call?
我需要从 restful 向我的休息服务发出的请求中获取完整的 url 主机名或 IP 地址。有什么办法可以做到吗?
类似于InetAddress ip = ip.getHostName();在 java.
使用 Jersey,您可以执行以下操作
String clientHost = req.getRemoteHost(); // req is HttpServletRequest
String clientAddr = req.getRemoteAddr();
当你说 InetAddress ip = ip.getHostName();您将获得您的休息服务所在机器的主机名 运行,要获取发出请求的机器的名称,您需要使用类似于 request.getRemoteHost(); 的东西;该值可能取决于发出请求的机器的网络环境。
要完整url请参考下面post。
What's the best way to get the current URL in Spring MVC?
Using CDI and @Context,类似于Ashir Khan 的评论,requestContext或部分请求上下文可以在 运行 时间提供。许多类型可以由 @Context 注释绑定并由容器注入,尽管这样会更好:
- 尽可能降低注入数据的可见性即绑定到方法而不是class和
- 尽可能减少注入的信息量,即 如果您想要的只是 baseUri 而不是完整的请求上下文,请绑定 UriInfo .
听起来很多,但就像(修改)Ashir 的代码一样简单:
@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();
}
您可以使用 UriInfo
class 并使用 @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
我需要从 restful 向我的休息服务发出的请求中获取完整的 url 主机名或 IP 地址。有什么办法可以做到吗?
类似于InetAddress ip = ip.getHostName();在 java.
使用 Jersey,您可以执行以下操作
String clientHost = req.getRemoteHost(); // req is HttpServletRequest
String clientAddr = req.getRemoteAddr();
当你说 InetAddress ip = ip.getHostName();您将获得您的休息服务所在机器的主机名 运行,要获取发出请求的机器的名称,您需要使用类似于 request.getRemoteHost(); 的东西;该值可能取决于发出请求的机器的网络环境。
要完整url请参考下面post。 What's the best way to get the current URL in Spring MVC?
Using CDI and @Context,类似于Ashir Khan
- 尽可能降低注入数据的可见性即绑定到方法而不是class和
- 尽可能减少注入的信息量,即 如果您想要的只是 baseUri 而不是完整的请求上下文,请绑定 UriInfo .
听起来很多,但就像(修改)Ashir 的代码一样简单:
@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();
}
您可以使用 UriInfo
class 并使用 @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