【问题标题】: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
    }    
    

    【讨论】:

    • 这不会解决问题,我需要完整的 API 签名,它会导致调用该方法,正如我已经解释的那样。我需要得到“host:port/customer/1”的完整签名
    【解决方案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

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-09
        • 1970-01-01
        • 2012-07-15
        • 2023-02-21
        • 2021-01-16
        • 2020-10-19
        相关资源
        最近更新 更多