这几天做东西接触了JAX-RS的东西,没有系统的从开始就学,只是单纯去复制粘贴的用,主要用到了几个Annotations变量,具体如下:

queryparam、PathParam、FormParam、Context、RestController。下面就分别解释下他们的用法:

1.@queryparam

Path("/users")
public class UserService { @GET
@Path("/query")
public Response getUsers(
@QueryParam("from") int from,
@QueryParam("to") int to,
@QueryParam("orderBy") List<String> orderBy) { return Response
.status(200)
.entity("getUsers is called, from : " + from + ", to : " + to
+ ", orderBy" + orderBy.toString()).build(); } }

这里,在url中输入"/users/query/from=1&to=100&orderBy=name&orderBy=age",则输出一下结果:

getUsers is called, from : 1, to : 100, orderBy[name, age]

这里,也可以以动态方式获得,如下:

@Path("/users")
public class UserService { @GET
@Path("/query")
public Response getUsers(@Context UriInfo info) { String from = info.getQueryParameters().getFirst("from");
String to = info.getQueryParameters().getFirst("to");
List<String> orderBy = info.getQueryParameters().get("orderBy"); return Response
.status(200)
.entity("getUsers is called, from : " + from + ", to : " + to
+ ", orderBy" + orderBy.toString()).build(); }

URL:users/query?from=100&to=200&orderBy=age&orderBy=name 
输出为: 
getUsers is called, from : 100, to : 200, orderBy[age, name] 
注意这里把orderby后的两个参数读入为LIST处理了.

2.@pathParam

与@queryParam类似,但是,queryparam在url中是用键值对来传递,而在pathParam中是只出现值而不出现参数,

url如是:"/users/2011/20/10",例如:

@GET
@Path("{year}/{month}/{day}")
public Response getUserHistory(
@PathParam("year") int year,
@PathParam("month") int month,
@PathParam("day") int day) { String date = year + "/" + month + "/" + day; return Response.status(200)
.entity("getUserHistory is called, year/month/day : " + date)
.build(); }

这里通过上面的url将输出:

  getUserHistory is called, year/month/day : 2011/20/10

可以用多个param,并且若path中有相同参数名,则采用最接近的参数名所对应的值,如

@Path("/customers/{id}")
public class CustomerResource {
@Path("/address/{id}")
@Produces("text/plain")
@GET
public String getAddress(@PathParam("id") String addressId) {...}
}

如:customers/123/address/456 , 则 addressId 的值为456.

3.@DefaultValue

@Path("/users")
public class UserService { @GET
@Path("/query")
public Response getUsers(
@DefaultValue("1000") @QueryParam("from") int from,
@DefaultValue("999")@QueryParam("to") int to,
@DefaultValue("name") @QueryParam("orderBy") List<String> orderBy) { return Response
.status(200)
.entity("getUsers is called, from : " + from + ", to : " + to
+ ", orderBy" + orderBy.toString()).build(); }

输入url为:/users/query

输出为:

getUsers is called, from : 1000, to : 999, orderBy[name]

4.@FormParam

FormParam用于提取post请求中的form数据,具体举例如下:

<FORM action="http://example.com/customers" method="post">
<P>
First name: <INPUT type="text" name="firstname"><BR>
Last name: <INPUT type="text" name="lastname"><BR>
<INPUT type="submit" value="Send">
</P>
</FORM>
@Path("/customers")
public class CustomerResource {
@POST
public void createCustomer(@FormParam("firstname") String first,
@FormParam("lastname") String last) {
...
}
}

5.@context

当jax-rs服务基于servlet发布的时候 ,还可以通过@Context注入servlet中的ServletConfig , ServletContext ,HttpServletRequest , HttpServletResponse

然后REST就可以通过sessionid来保持住用户状态。举例如下:

@Path("UserContext")
public class UserContext { @Context UriInfo uriInfo;
@Context HttpHeaders httpHeaders;
@Context SecurityContext sc;
@Context Request req;
@Context Response resp;
@Context HttpServletResponse response;
@Context HttpServletRequest request; @GET
public String hi(@QueryParam("name") String yourName ){
if(yourName!=null)
request.getSession().setAttribute("name", yourName); String username = (String) request.getSession().getAttribute("name");
if(username!=null){
System.out.println(request.getSession().getId() + ":" + username);
}
else{
System.out.println(request.getSession().getId() + "没有用户");
}
return null;
}
}
<!--在web.xml加入-->
<servlet>
<display-name>JAX-RS REST Servlet</display-name>
<servlet-name>JAX-RS REST Servlet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JAX-RS REST Servlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>

在url中输入:”/rest/services/UserContext“则输出:

A46756539D2E39CC2CFFCB3FE1C99E70没有用户

若在url中输入:http://localhost:8080/rest/services/UserContext?name=hello

则输出:

A46756539D2E39CC2CFFCB3FE1C99E70:hello

6.@RestController

它继承自@Controller注解,我们可以开发REST服务的时候不需要使用@Controller而专门的@RestController

定义如下:

@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController

7.还有cookieparam和headerparam等,此处没怎么接触,就先不学习了。

JAX-RS之queryparam、PathParam、DefaultValue、FormParam、Context、RestController等的更多相关文章

  1. jax-rs中的一些参数标注简介(@PathParam,@QueryParam,@MatrixParam,@HeaderParam,@FormParam,@CookieParam)

    先复习一下url的组成: scheme:[//[user:password@]host[:port]][/]path[?query][#fragment] jax-rs anotation @Path ...

  2. [REST Jersey] @QueryParam Demo

    This demo sourced from the jersey tutor. https://jersey.java.net/documentation/latest/jaxrs-resource ...

  3. React 新 Context API 在前端状态管理的实践

    本文转载至:今日头条技术博客 众所周知,React的单向数据流模式导致状态只能一级一级的由父组件传递到子组件,在大中型应用中较为繁琐不好管理,通常我们需要使用Redux来帮助我们进行管理,然而随着Re ...

  4. React 全新的 Context API

    Context API 可以说是 React 中最有趣的一个特性了.一方面很多流行的框架(例如react-redux.mobx-react.react-router等)都在使用它:另一方面官方文档中却 ...

  5. Apache CXF 3.0: CDI 1.1 Support as Alternative to Spring--reference

    With Apache CXF 3.0 just being released a couple of weeks ago, the project makes yet another importa ...

  6. REST 在 Java 中的使用

    REST是一种混合的架构风格,它的由来以及它的架构元素在笔者的前一篇文章<REST 架构风格的由来 & 元素>中已经描述了.本篇主要描述一下J2EE对REST的支持. Java是在 ...

  7. Jersey MVC

    Jersey是JAX-RS(JavaAPI for RESTful Service)标准的一个实现,用于开发RESTful Web Application.可以参考JAX-RS的介绍(http://w ...

  8. Spring boot中使用springfox来生成Swagger Specification小结

    Rest接口对应Swagger Specification路径获取办法: 根据location的值获取api   json描述文件 也许有同学会问,为什么搞的这么麻烦,api json描述文件不就是h ...

  9. RestEasy简介

    RestEasy简介 RestEasy技术说明 简介 RESTEasy RESTEasy是JBoss的一个开源项目,提供各种框架帮助你构建RESTful Web Services和RESTful Ja ...

随机推荐

  1. UVA 1639 Candy (组合数+精度)

    题意:两个箱子,每个箱子有n颗糖,每次有p的概率拿1号箱子的一颗糖出来(有1-p的概率拿2号箱子的一颗糖出来),问当打开某个箱子为空的时候,另一个箱子的期望糖的数量是多少 题解:枚举另一个箱子的糖的数 ...

  2. Python基础笔记系列六:字典

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 字典字典的元素是由一对对键值对组成,每一对之间用逗号隔开,将所有的键值对用 ...

  3. Java动态代理的总结

    最近和一个好友在聊起Mybatis时,他问用Mybatis我们只是配置好mapper,然后写dao层接口就实现了dao层方法.然后我说我觉得用动态代理可以实现.然后他又说感觉动态代理和外观模式没什么区 ...

  4. Java 注解指导手册 – 终极向导

    原文链接 原文作者:Dani Buiza 译者:Toien Liu  校对:深海 编者的话:注解是java的一个主要特性且每个java开发者都应该知道如何使用它. 我们已经在Java Code Gee ...

  5. 负载均衡之HTTP重定向

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/38014581 由于目前现有网络的各个核心部分随着业务量的提高,访问量和数据流量的快速增长,其 ...

  6. Python Falling back to the 'python' engine because the 'c' engine does not support regex separators

    环境 Anaconda3 Python 3.6, Window 64bit 书籍 O'Reilly出版的Wes McKinney编的<Python for Data Analysis> 警 ...

  7. Appium移动自动化测试(三)--自动化测试demo

    使用java语言编写并实现自动化测试实例 前面我已经搭建好了appium所需要的环境,本文我以系统自带的计算器app为测试对象,进行学习. 一.将测试机与PC连接 本人使用的是Android模拟器,测 ...

  8. Win10/Server2016镜像集成离线补丁

    Win10镜像集成离线补丁 因为正常安装系统后再打补丁比较漫长,可以事先做好打过补丁的iso,备将来使用. 以管理员身份运行cmd,然后通过dism提取.挂载.集成补丁.保存install.wim镜像 ...

  9. 三 web爬虫,scrapy模块介绍与使用

    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以 ...

  10. 【PAT-L2-020】功夫传人

    链接:https://www.patest.cn/contests/gplt/L2-020 一门武功能否传承久远并被发扬光大,是要看缘分的.一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟 ...