@PathParam和@PathVariable有什么区别

时间:2015-09-03 05:20:12

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

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

7 个答案:

答案 0 :(得分:13)

@PathVariable@PathParam都用于访问URI Template

中的参数

差异:

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

答案 1 :(得分:11)

<强> PathParam:

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

例如,

http://localhost:8080/books?isbn=1234

@GetMapping("/books/")
    public Book getBookDetails(@RequestParam("isbn") String isbn) {

<强> PathVariable:

将URI占位符值分配给方法参数。

例如,

http://localhost:8080/books/1234

@GetMapping("/books/{isbn}")
    public Book getBook(@PathVariable("isbn") String isbn) {

答案 2 :(得分:6)

@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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

@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);
     }

答案 6 :(得分:-1)

<强> @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){...}

注意

无论我们请求休息电话,即@PathVariable

我们正在访问的任何用于编写查询的内容,即@RequestParam