【问题标题】:What is the difference between @PathParam and @PathVariable [closed]@PathParam 和 @PathVariable 有什么区别 [关闭]
【发布时间】:2015-11-28 19:24:23
【问题描述】:

据我所知,两者的目的相同。除了 @PathVariable 来自 Spring MVC 和 @PathParam 来自 JAX-RS 之外。对此有何见解?

【问题讨论】:

  • Suresh,比起下面的答案,我更喜欢你自己的答案。我认为也许重要的是要注意 1) Spring 尊重 PathParam 以及它自己的 PathVariable,以及 2) 只要​​有可能,Java 的 PathParam 是可取的(因为有一天你可能会用另一种技术取代 Spring,但只要你使用 Java ...)
  • 期待有关何时使用路径变量以及何时使用路径参数的案例的答案。

标签: spring-mvc jax-rs restful-url path-parameter


【解决方案1】:

@PathVariable@PathParam 都用于访问来自URI Template 的参数

区别:

  • 正如您提到的,@PathVariable 来自 spring,@PathParam 来自 JAX-RS
  • @PathParam 只能与 REST 一起使用,而 @PathVariable 在 Spring 中使用,因此它可以在 MVC 和 REST 中使用。

【讨论】:

    【解决方案2】:

    查询参数:

    将 URI 参数值分配给方法参数。在 Spring 中,它是@RequestParam

    例如,

    http://localhost:8080/books?isbn=1234
    
    @GetMapping("/books/")
        public Book getBookDetails(@RequestParam("isbn") String isbn) {
    

    路径参数:

    将 URI 占位符值分配给方法参数。在 Spring 中,它是@PathVariable

    例如,

    http://localhost:8080/books/1234
    
    @GetMapping("/books/{isbn}")
        public Book getBook(@PathVariable("isbn") String isbn) {
    

    【讨论】:

    • 在你的第一个例子中不是请求参数
    • 您的 PathParam 标题具有误导性,因为您给出的解释是 @RequestParam(不是 PathParam)
    • @Omkar 你的解释是错误的!!! PathParam 是 javax.ws.rs,相当于 Spring 的 PathVariable。同样,来自 javax.ws.rs 的 QueryParam 等价于 RequestParam
    • @ImamBux - 感谢您的关注。更新了答案。
    【解决方案3】:

    @PathParam 是一个参数注释,它允许您将变量 URI 路径片段映射到您的方法调用中。

    @Path("/library")
    public class Library {
    
       @GET
       @Path("/book/{isbn}")
       public String getBook(@PathParam("isbn") String id) {
          // search my database and get a string representation and return it
       }
    }
    

    更多详情:JBoss DOCS

    在 Spring MVC 中,您可以在方法参数上使用 @PathVariable 注释将其绑定到 URI 模板变量的值 更多详情:SPRING DOCS

    【讨论】:

    • 换句话说,它的作用是一样的,但是@PathVariable相当于在Spring中使用(?)
    【解决方案4】:

    @PathParam 是一个参数注释,它允许您将变量 URI 路径片段映射到您的方法调用中。

    @PathVariable是从URI中获取一些占位符(Spring称其为URI模板)

    【讨论】:

      【解决方案5】:

      有些人也可以在 Spring 中使用 @PathParam,但在发出 URL 请求时 value 将为 null 同时,如果我们使用@PathVarriable,那么如果没有传递值,那么应用程序将抛出错误

      【讨论】:

        【解决方案6】:

        @PathParam:用于注入在@Path表达式中定义的命名URI路径参数的值。

        例如:

        @GET
        @Path("/{make}/{model}/{year}")
        @Produces("image/jpeg")
        public Jpeg getPicture(@PathParam("make") String make, @PathParam("model") PathSegment car, @PathParam("year") String year) {
                String carColor = car.getMatrixParameters().getFirst("color");
        
        }
        

        @Pathvariable:该注解用于处理请求URI映射中的模板变量,并作为方法参数使用。

        例如:

             @GetMapping("/{id}")
             public ResponseEntity<Patient> getByIdPatient(@PathVariable Integer id) {
                  Patient obj =  service.getById(id);
                  return new ResponseEntity<Patient>(obj,HttpStatus.OK);
             }
        

        【讨论】:

          【解决方案7】:

          @PathVariable

          @PathVariable 它是注解,用于传入请求的 URI。

          http://localhost:8080/restcalls/101?id=10&name=xyz

          @RequestParam

          @RequestParam 注解用于从请求中访问查询参数值。

          public String getRestCalls(
          @RequestParam(value="id", required=true) int id,
          @RequestParam(value="name", required=true) String name){...}
          

          注意

          无论我们通过 rest 调用请求什么,即 @PathVariable

          我们为编写查询而访问的任何内容,即@RequestParam

          【讨论】:

          • 虽然我的问题是 pathvariable 和 pathparam 之间的区别。谢谢你的回复。
          猜你喜欢
          • 1970-01-01
          • 2018-05-05
          • 1970-01-01
          • 1970-01-01
          • 2010-12-10
          • 2011-09-20
          • 2013-03-25
          • 2023-03-08
          • 2016-07-17
          相关资源
          最近更新 更多