RESTful 两个注解@PathParam 和 @QueryParam 以及@PathVariable

 

@PathVariable 映射 URL 绑定的占位符

通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过

@PathVariable("xxx") 绑定到操作方法的入参中。

一般与@RequestMapping(method = RequestMethod.GET)一起使用

@RequestMapping("/getUserById/{name}")
    public User getUser(@PathVariable("name") String name){
        return userService.selectUser(name);
    }
若方法参数名称和需要绑定的uri中变量名称一致时,可以简写:
@RequestMapping("/getUser/{name}") public User getUser(@PathVariable String name){ return userService.selectUser(name); }

---------------------------------------------------

 

关于@PathParam 和 @QueryParam,两个注解都是取路径的,但是方式不同。这里我之前也遇到问题了。主要是看你怎么传入的路径。

@QueryParam 主要通过键值对这样取 如 a=1     QueryParam("a")

@PathParam   主要通过路径映射取(后面解释)

 
1 关于@QueryParam用法,我们直接取参数传入的名字。

如  localhost:8080/introduction?booId=1?gg=2?version=3?platform=4?vps=5

.此时我们就用QueryParam   通过@QueryParam("bookId") Integer bookId 实际代码如下

    @GET
    @Path("/introduction")
    Response introduction(
            @QueryParam("bookId") Integer bookId,
            @QueryParam("gg") Integer gg,
            @QueryParam("version") String version,
            @QueryParam("platform") String platform,
            @QueryParam("vps") String vps
    );

后台就获得booId=1    gg=2    version=3       platform=4       vps=5

 
2  如果使用PathParam ,传参就应该为

localhost:8080/introduction/1/2/3/4/5  对应下面的  /{bookId}/{gg}/{version}/{plarform}/{vps}

@Path("/introduction/{bookId}/{gg}/{version}/{plarform}/{vps}")

也就是让booId=1    gg=2    version=3       platform=4       vps=5  然后通过

@PathParam ("bookId") Integer bookId                把bookId的值取出来

    @GET
    @Path("/introduction/{bookId}/{gg}/{version}/{plarform}/{vps}")
    Response introduction(
            @PathParam ("bookId") Integer bookId,
            @PathParam ("gg") Integer gg,
            @PathParam ("version") String version,
            @PathParam ("platform") String platform,
            @PathParam ("vps") String vps
    );

后台同样获得booId=1    gg=2    version=3       platform=4       vps=5

最后附上简单常用的注解,和一个讲restful 框架的一个帖子
@PathParam注解

该注解定义路径的参数信息,用于指定的URI路径参数,@PathParam 用在接收请求的方法的参数上。

    @GET
    @Path("/user/{username}")
    public String getUser(@PathParam("username") String userName) {
        return "hello," + userName;
    }


@PathParam注解提供更精确的匹配方式,如要求变量只能由字母和数字构成,则可以使用表达式覆盖默认的表达式[^/]+?
如@Path("users/{username: [a-zA-Z][a-zA-Z_0-9]*}")

---------------------------------------------------------------------------

什么是资源(Resource)

所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的标识符。
应用,资源和子资源

一个完整的资源访问路径(URI)由以下部分构成
<协议>://<主机地址>:<端口>/应用域/<资源路径>/<子资源路径>
如系统应用中获取用户详细信息的URI可表示为
http://192.169.1.10:8080/system/user/1000001
协议:常用的协议有http、https、ws

    主机地址:IP地址或域名
    端口:服务端口
    应用域:应用中根据业务属性划定的访问范围,如/system代表系统业务域,/product代表产品业务域
    资源路径:包含所有子资源的路径
    子资源路径:具体的资源访问地址

Jersey中应用域在服务器的启动类中,通过ServletContextHandler提供的setContextPath方法指定。

ServletContextHandler apiContext = new ServletContextHandler(
                ServletContextHandler.SESSIONS);
apiContext.addServlet(sh, "/*");
//指定应用域
apiContext.setContextPath("/system");

@Path注解

@Path注解的源码如下,可以看到该注解可以标记在类上,也可以标记在方法上,接收一个value参数,标识资源的地址。

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Path {
    String value();
}

@Path使用举例

@Path("")
@WebService
public class WelcomeRes {
    @Path("")
    @GET
    public String sayHello(@Context HttpServletRequest request) {
        return "hello, jetty!";
    }
}

根资源类(Root Resource Classes)

在JAX-RS标准中,根资源类是带有@PATH 注解的类,且包含至少一个@Path 注解的方法或者方法带有 @GET、@PUT、@POST、 @DELETE 资源方法指示器的 POJO。
资源方法(Resource Method)

资源方法是带有资源方法指示器(resource method designator)注解的方法,在Jersey中,资源方法指示器即@GET、@HEAD、@PUT、@POST、 @DELETE。
关于@Path注解的理解

    @Path("")相当于@Path("/"),即使注解的value中不显示指定"/",框架会自动加上。

如以下示例中路径注解加"/"和不加,最后的访问地址都为/user

    @Path的内容是否以”/”开头都没有区别
    是否以”/”结尾也没有什么区别


 

posted @ 2021-06-17 14:00  风骚羊肉串  阅读(1006)  评论(0编辑  收藏  举报