JAX-RS之queryparam、PathParam、DefaultValue、FormParam、Context、RestController等
这几天做东西接触了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等的更多相关文章
- jax-rs中的一些参数标注简介(@PathParam,@QueryParam,@MatrixParam,@HeaderParam,@FormParam,@CookieParam)
先复习一下url的组成: scheme:[//[user:password@]host[:port]][/]path[?query][#fragment] jax-rs anotation @Path ...
- [REST Jersey] @QueryParam Demo
This demo sourced from the jersey tutor. https://jersey.java.net/documentation/latest/jaxrs-resource ...
- React 新 Context API 在前端状态管理的实践
本文转载至:今日头条技术博客 众所周知,React的单向数据流模式导致状态只能一级一级的由父组件传递到子组件,在大中型应用中较为繁琐不好管理,通常我们需要使用Redux来帮助我们进行管理,然而随着Re ...
- React 全新的 Context API
Context API 可以说是 React 中最有趣的一个特性了.一方面很多流行的框架(例如react-redux.mobx-react.react-router等)都在使用它:另一方面官方文档中却 ...
- 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 ...
- REST 在 Java 中的使用
REST是一种混合的架构风格,它的由来以及它的架构元素在笔者的前一篇文章<REST 架构风格的由来 & 元素>中已经描述了.本篇主要描述一下J2EE对REST的支持. Java是在 ...
- Jersey MVC
Jersey是JAX-RS(JavaAPI for RESTful Service)标准的一个实现,用于开发RESTful Web Application.可以参考JAX-RS的介绍(http://w ...
- Spring boot中使用springfox来生成Swagger Specification小结
Rest接口对应Swagger Specification路径获取办法: 根据location的值获取api json描述文件 也许有同学会问,为什么搞的这么麻烦,api json描述文件不就是h ...
- RestEasy简介
RestEasy简介 RestEasy技术说明 简介 RESTEasy RESTEasy是JBoss的一个开源项目,提供各种框架帮助你构建RESTful Web Services和RESTful Ja ...
随机推荐
- js异步获取数据的问题
最近做js开发的时候发现了很多哥们不能区分同步和异步的区别,典型的在ajax部分,在该ajax为异步操作的时候,获取不到success之后的data的值,于是产生了各种奇葩的写法.比如创建一个局部变量 ...
- quartz(2) -- 入门案例
第一步:添加jar,maven配置 <!-- quartz --> <dependency> <groupId>org.quartz-scheduler</g ...
- JAVA实现IP地址解析
转载至:http://blog.csdn.net/dragontang/article/details/4151660 http://www.iteye.com/topic/340548#
- 一个问题:C#引用类型传参,说出你的答案
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { People p = new Peo ...
- Android--第三方控件--okHttp
Android中有很多的第三方控件,其中OkHttp是一个很强大的用于网络加载的第三方框架,当然了,它的内部也是使用原生的代码封装好的.今天我们就来看一下OkHttp的简单用法: 说到网络请求,肯定就 ...
- Hibernate -- Session的主键生成策略
*缓存:集合--集合放置到内存中 * 只要session存在 session的一级缓存肯定存在. *当执行查询时,以oid为oid=1条件到session的一级缓存中查找oi ...
- JDK安装配置教程
一.首先下载JDK的最新版本.可以去http://java.sun.com/javase/downloads/index.jsp下载最新版本JDK1.6.一切下载后选择安装路径,例如我选择安装在&qu ...
- CSS 实现隐藏滚动条同时又可以滚动(转)
CSS 实现隐藏滚动条同时又可以滚动 移动端页面为了更接近原生的体验,是否可以隐藏滚动条,同时又保证页面可以滚动? 使用 overflow:hidden 隐藏滚动条,但存在的问题是:页面或元素失去了滚 ...
- 使用Selenium通过浏览器对网站进行自动化测试和相关问题
使用Selenium通过浏览器对网站进行自动化测试 自动化测试概念: 一般是指软件测试的自动化,软件测试就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件. 广义上来讲 ...
- How to Have a Healthy Relationship --shanbei 为单身节写
我在扇贝发现一片好文. Sometimes relationships can seem like a lot of work until you sit back and realize just ...