环境准备:
Intellij IDEA
tomcat 7
1. 创建项目
创建一个web Application项目
创建完成后,使用Add Frameworks Support把maven项目的支持引入。
在项目上右键:
到此为止就已经成功创建了一个web项目了。
2. 项目配置
2.1 Maven配置
修改pom.xml,引入Jersey相关jar包
org.glassfish.jersey.containers
jersey-container-servlet
2.25
2.2 web配置
修改web.xml
JAX-RS Servlet
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.packages
com.hlzf.hellojersey
1
JAX-RS Servlet
/api/*
其中com.hlzf.hellojersey对应放置restful demo代码的包,/api/对应的是restful api映射的地址,一般我们不把这个地址设为/*,因为这样会覆盖默认的index地址,除非你自己重新定义了首页地址。
2.3 编写逻辑代码
在com.hlzf.hellojersey下新建Hello.java文件。
packagecom.hlzf.hellojersey;importjavax.ws.rs.GET;importjavax.ws.rs.POST;importjavax.ws.rs.Path;importjavax.ws.rs.Produces;importjavax.ws.rs.core.MediaType;/**@Path 对应的是restful api的子路劲,比如前面配置的是/api/*,则访问该API的路径就是https//:ip:port/api/hello
@GET @POST 对应的是请求资源用的HTTP方法
@Produces 表示返回的数据类型,如MediaType.TEXT_PLAIN对应返回文本类型*/@Path("hello")public classHello {
@GET
@Produces(MediaType.TEXT_PLAIN)publicString sayHello(){return "Hello,I am text!";
}
@POST
@Produces(MediaType.TEXT_XML)publicString sayXMLHello() {return "<?xml version=\"1.0\"?>" + " Hello,I am xml!" + "";
}
@GET
@Produces(MediaType.TEXT_HTML)publicString sayHtmlHello() {return " " + "
" + "Hello Jersey" + ""+ "
" + "Hello,I am html!" + "
" + " ";}
}
3. 启动项目
将maven引入的jar包放到lib文件夹下。
点击File->Project Structure
在tomcat中引入项目,启动
使用网页进行get请求:
4. 发布war包
打包完成后,在out目录找到war包 :
5. 带参数的api接口设计
5.1 @PathParam
使用该注释获取参数时可以获取URI中制定规则的参数
//该类的路径为/user
@GET
@Path("{username"})
@Produces(MediaType.APPLICATION_JSON)public User getUser(@PathParam("username") String userName) {
//...
}
5.2 @QueryParam
该参数用于获取Get请求中的查询参数,和上一个的区别是它是通过URL中的?符号来实现的。
@GET
@Path("/user")
@Produces("text/plain")public User getUser(@QueryParam("name") String name, @QueryParam("age") intage) {
//...
}
5.3 @FormPara
从Post请求的表单中获取数据
@POST
@Consumes("application/x-www-form-urlencoded")
publicvoid post(@FormParam("name") String name) {//
}
5.4 默认参数值DefaultValue
在函数获取参数时参数有一个默认值,那么就可以使用该注释,它的使用方法如下:
@GET
@Path("/user")
@Produces("text/plain")public User getUser(@QueryParam("name") String name, @DefaultValue("26") @QueryParam("age") intage) {
//...
}
5.5 使用Map的参数@Context
在一个大型的server中,由于参数的多变,参数结构的调整很容易遇到问题,这时候就可以考虑使用@Context来进行注释了。例子如下:
@GETpublicString get(@Context UriInfo ui) {
MultivaluedMap queryParams =ui.getQueryParameters();
MultivaluedMap pathParams =ui.getPathParameters();
}
6. 参考链接