【问题标题】:Is there a way to get complete API signature of REST Api Inside the method implementing @Path有没有办法在实现@Path的方法中获得REST Api的完整API签名
【发布时间】:2017-10-04 19:14:15
【问题描述】:
正如标题所示,我有实现 REST 的 Spring 方法和 Spring REST 注释 @Path
我想获得为获得该方法而制作的 API 的完整签名我的意思是完整的签名
比如
@Path("/customer/{id}")
method(String id){}
通过某种方式,我可以获得完整的签名,例如:http://host:port/customer/1 在方法中。
【问题讨论】:
标签:
java
spring
rest
jax-rs
spring-rest
【解决方案1】:
是的,您可以使用注解@PathParam 获取{id}:
@Path("/customer/{id}")
public method(@PathParam("id") String id) {
// implementation
}
【解决方案2】:
您可以只注入UriInfo 并使用方法getAbsolutePath()。
@GET
@Path("/customer/{id}")
public Response get(@PathParam("id") String id, @Context UriInfo info) {
String absPath = info.getAbsolutePath().toString();
}
顺便说一句,请花一些时间了解 Spring MVC (REST) 和 Jersey (JAX-RS) 之间的区别。您的问题似乎表明您认为它们可能是同一事物,但事实并非如此。
【解决方案3】:
我想这可能会回答你的问题。
@Path("/customer/{id}")
@Get
public ResponseEntity<String> getCustomer(
@PathParam("id") String id, HttpServletRequest request) {
System.out.println(request.getRequestURL());
return ResponseEntity.ok(id);
}
除了 Path 参数,我们还需要添加 HttpServletRequest,它包含有关该特定请求的全部信息。
这里request.getRequestURL() 给出了完整的请求 url 路径。例如http://localhost:8080/testApp/customer/1。
希望这会有所帮助。