@PathParam和@QueryParam有什么区别


100

我是RESTful球衣的新手。我想问一下@PathParam@QueryParam球衣有什么区别?

Answers:


142

查询参数添加到?标记后的url中,而路径参数是常规URL的一部分。

在下面的URL中,tom可以是path参数的值,并且有一个查询参数,其名称id和值为1

http://mydomain.com/tom?id=1


15

除了@Ruben提供的上述说明之外,我想补充一点,您还可以在Spring RESTFull实现中引用相同的内容。

JAX-RS规范@PathParam-将URI模板参数的值或包含模板参数的路径段绑定到资源方法参数,资源类字段或资源类bean属性。

@Path("/users/{username}")
public class UserResource {

        @GET
        @Produces("text/xml")
        public String getUser(@PathParam("username") String userName) {
            ...
        }
    }

@QueryParam-将HTTP查询参数的值绑定到资源方法参数,资源类字段或资源类bean属性。

URI:users / query?from = 100

@Path("/users")
public class UserService {

    @GET
    @Path("/query")
    public Response getUsers(
        @QueryParam("from") int from){
}}

要使用Spring实现相同的功能,可以使用

@PathVariable(Spring)== @PathParam(Jersey,JAX-RS),

@RequestParam(Spring)== @QueryParam(泽西岛,JAX-RS)


1

此外,查询参数可以为null,但路径参数不能为null。如果不附加path参数,则会出现404错误。因此,如果要强制发送数据,则可以使用path参数。


0
    @javax.ws.rs.QueryParam
    This annotation allows you to extract values from URI query parameters.
    @javax.ws.rs.PathParam
    This annotation allows you to extract values from URI template parameters.

        PART-1 : @javax.ws.rs.PathParam

        @Path("/mercedes")
        public class MercedesService {
        @GET
        @Path("/e55/{year}")
        @Produces("image/jpeg")
        public Jpeg getE55Picture(@PathParam("year") String year) {
        ...
        }

    If I query the JAX-RS service with GET /mercedes/e55/2006, the getE55Picture()
    method would match the incoming request and would be invoked.

    PART-2 : @javax.ws.rs.QueryParam

 URI might look like this: GET /cus?start=0&size=10

        @Path("/cus")
        public class GreedCorruption {
        @GET
        @Produces("application/xml")
        public String getDeathReport(@QueryParam("start") int start,
        @QueryParam("size") int size) {
        ...
        }
        }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.