Jersey+Spring+Maven(转)
spring和maven的搭建参考相关文档。本文只介绍与jersey有关配置。
一、jersey在maven中的依赖包
<!-- jersey -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.8</version></dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.8</version></dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.8</version></dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0-m10</version></dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version></dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version></dependency>
<!-- jersey end -->
需要json,加入以下
<!-- json-->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.8.8</version>
</dependency>
<!-- json-->
尽量保持包版本的一致
二、整合spring
1、 引入整合包,注意版本
<!-- jersey spring -->
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-spring</artifactId>
<version>1.8</version>
<!-- 去除自带的spring版本 -->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<artifactId>spring-web</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- jersey spring end-->
2、web.xml配置
所有rest请求都经过spring过滤
<!-- jersey spring -->
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-spring</artifactId>
<version>1.8</version>
<!-- 去除自带的spring版本 -->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<artifactId>spring-web</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- jersey spring end-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
三、编写服务端资源
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class User implements java.io.Serializable{
private static final long serialVersionUID = 1L;
private String userName = "";
private int age = 0;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "name:"+ userName + " age:" + age;
}
}
import javax.ws.rs.FormParam;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement //表示可以被转换为xml或json格式
public class Home implements java.io.Serializable {
@FormParam("roomno")
private int roomNo;
@FormParam("address")
private String address;
private String longtime;
public int getRoomNo() {
return roomNo;
}
public void setRoomNo(int roomNo) {
this.roomNo = roomNo;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getLongtime() {
return longtime;
}
public void setLongtime(String longtime) {
this.longtime = longtime;
}
public String toString() {
return "roomNo:" + roomNo + " address:" + address + " longtime:" + longtime;
}
}
2、编写资源接口
import javax.ws.rs.BeanParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
@Component //定义此类为spring组件,即bean类.
@Scope("prototype") //Spring会针对每一个request请求都生成新的Jersey服务类实例,此方法不需要配置Spring RequsetContextListener
@Path("/restresource")
public class TestRestResource {
1、无参数返回json格式,如返回xml,将Produces参数修改为MediaType.APPLICATION_XML
@GET
@Path("/getUser")
@Produces(MediaType.APPLICATION_JSON)
public User getUser() {
User user = new User();
user.setUserName("sed");
user.setAge(29);
return user;
}
2、@PathParam("id")获取URI中指定规则的参数
@GET
@Path("getUser/{id}")
@Produces(MediaType.TEXT_PLAIN)
public String getUserId(@PathParam("id") String id) {
return id;
}
3、@QueryParam 用于获取GET请求中的查询参数
@GET
@Path("getId")
@Produces(MediaType.TEXT_PLAIN)
public String getId(@QueryParam("id") String id)
{
return id;
}
4、输入参数为xml格式,输出为json格式。可以根据需要切换produces和consumes的类型
@POST
@Path("insertUser")
@Produces(MediaType.APPLICATION_JSON) //指定发送请求的 MIME 类型
@Consumes(MediaType.APPLICATION_XML) //指定响应所能接受的 MIME 类型
public User insertuser(User user) {
return user;
}
5、BeanParam 当请求参数很多时,比如客户端提交一个修改用户的PUT请求,请求中包含很多项用户信息
@PUT
@Path("insertUserFromBean")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public User inserthome(@BeanParam User user) {
return user;
}
6、@FormParam 从POST请求的表单参数中获取数据
@POST
@Path("insertUserFromForm")
@Consumes("application/x-www-form-urlencoded")
@Produces(MediaType.TEXT_PLAIN)
public String insertuser(@FormParam("username") String userName, @FormParam("age") int age) {
User user = new User();
user.setUserName(userName);
user.setAge(age);
return user.toString();
}
7、多参数传递
@POST
@Path("map")
@Produces(MediaType.TEXT_PLAIN)
public String getMap(MultivaluedMap<String, String> formParams) {
String result = "who:" + formParams.getFirst("who") + " ; what:"+formParams.getFirst("what");
return formParams.toString();
}
8、
@DELETE
@Path("deleteUser/{id}")
@Produces(MediaType.TEXT_PLAIN)
public String deleteUser(@PathParam("id") String id) {
//System.out.println(uriInfo.getAbsolutePath().toString());
return "delete " + id;
}
}
四、客户端调用
private static WebResource getWr(String USER_URL) {
Client c = Client.create(); //创建一个 com.sun.jersey .api.client.Client 类的实例
WebResource wr = c.resource(USER_URL); // 建了一个 WebResponse 对象
return wr;
}
1、调用getUser
代码:
String USER_URL = "http://localhost:8000/restful/services/restresource/getUser";
System.out.println(getWr(USER_URL).get(String.class));
输出:
{"userName":"sed","age":29}
2、调用getUser/{id}
代码:
String USER_URL = "http://localhost:8000/restful/services/restresource/getUser";
String result = getWr(USER_URL).path("hnsed").get(String.class) ;
System.out.println(result);
输出:
hnsed
3、调用getId
代码:
String USER_URL = "http://localhost:8000/restful/services/restresource/getId";
String result = getWr(USER_URL).queryParam("id", "109").get(String.class);
System.out.println(result);
输出:
109
4、调用insertUser
代码:
User user = new User();user.setUserName("hndes");user.setAge(39);String USER_URL = "http://localhost:8000/restful/services/restresource/insertUser";MultivaluedMapImpl params = new MultivaluedMapImpl();params.add("user", user);String result = getWr(USER_URL).entity(user,MediaType.APPLICATION_XML).post(String.class);System.out.println(result);
输出:
{"userName":"hndes","age":39}
5、调用insertUserFromBean
代码:String USER_URL = "http://localhost:8000/restful/services/restresource/insertUserFromBean";String json = "{\"userName\":\"szh\",\"age\":\"6\"}";System.out.println(getWr(USER_URL).entity(json,MediaType.APPLICATION_JSON).put(String.class));输出:
{"userName":"szh","age":6}
6、调用insertUserFromForm
代码:
String USER_URL = "http://localhost:8000/restful/services/restresource/insertUserFromForm";
Form form = new Form();
form.add("username", "sed");
form.add("age",39);
//ClientResponse 对象代表了一个客户端收到的 HTTP 响应。
ClientResponse response = getWr(USER_URL).type(MediaType.APPLICATION_FORM_URLENCODED).post(ClientResponse.class, form);
int status = response.getStatus(); //获取对应请求的 HTTP 状态码
System.out.println(response.getEntity(String.class));
输出:
name:sed age:39
7、调用map
代码:
MultivaluedMap<String, String> params = new MultivaluedMapImpl();
params.add("who", "sed");
params.add("what","dohousework");
params.add("how","good");
params.add("where","hk");
params.add("when","long time");
String USER_URL = "http://localhost:8000/restful/services/restresource/map";
String result = getWr(USER_URL).post(String.class,params);
System.out.println(result);
输出:
{what=[dohousework], how=[good], when=[long time], where=[hk], who=[sed]}
8、调用deleteUser
代码:
String USER_URL = "http://localhost:8000/restful/services/restresource/deleteUser";
String result = getWr(USER_URL).path("109").delete(String.class);
System.out.println(result);
输出:
delete 109
注:1、Client 类是创建一个 RESTful Web Service 客户端的主要配置点。你可以使用它来配置不同的客户端属性和功能,并且指出使用哪个资源提供者。创建一个 Client 类的实例是一个比较昂贵的操作,所以尽量避免创建一些不需要的客户端实例。比较好的方式是尽可能地复用已经存在的实例。
2、通过使用 WebResource 对象来创建要发送到 Web 资源的请求,以及处理从 Web 资源返回的响应。例如,你可以使用 WebResource 对象来发送 HTTP GET、PUT、POST 以及 DELETE 请求

转载地址:http://ekekyn.blog.163.com/blog/static/313887320151294452322/
Jersey+Spring+Maven(转)的更多相关文章
- Jersey+Spring+Maven环境搭建
第一步:创建一个Maven工程.加入Jersey.Spring.Jersey+Spring的依赖包,以及内嵌的Tomcat7插件: pom.xml文件如图所示: <project xmlns=& ...
- 集成框架 javaweb开发平台ssmy_m(生成代码) java struts2 mybatis spring maven jquery
网页地址 http://blog.csdn.net/lpy3654321/article/details/31841573 项目设想,在项目开发中,我们的开发者大多数时间都在反复开发 相同的keywo ...
- Hession集成Spring + maven依赖通讯comm项目 + 解决@ResponseBody中文乱码
hessian结合spring的demo hessian的maven依赖: <!-- hessian --> <dependency> < ...
- 详解intellij idea搭建SSM框架(spring+maven+mybatis+mysql+junit)(下)
在上一篇(详解intellij idea 搭建SSM框架(spring+maven+mybatis+mysql+junit)(上))博文中已经介绍了关于SSM框架的各种基础配置,(对于SSM配置不熟悉 ...
- 02.基于IDEA+Spring+Maven搭建测试项目--详细过程
一.背景介绍 1.1公司相关技术 Git:是一款免费的开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,方便多人集成开发 Maven:是基于项目对象模型(POM),可以通过一小段描述信息 ...
- 【Spring学习】在Spring+Maven环境中使用Junit Test
在Spring+Maven环境中使用Junit Test 前言 以前我是很讨厌写测试代码的,总觉得测试用例是测试人员写的,现在想想自己真是Too yuong too simple,接触开发多了之后发现 ...
- 通过idea 打包 spring maven项目打包为可执行jar包
用assembly打包一直报错: shangyanshuodeMacBook-Pro:target shangyanshuo$ java -jar jobscrawler-1.0-SNAPSHOT-j ...
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener,环境Spring+Maven
记录一下莫名出现的错误.Spring+Maven+STS. 严重: Error configuring application listener of class org.springframewor ...
- spring maven pom.xml设置
spring pom.xml设置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns= ...
随机推荐
- Angularjs总结(八)$ cookie和$rootscope
AngularJS 提供了很好的 $cookie 和 $cookieStore API 用来处理 cookies .这两个服务都能够很好的发挥HTML5 cookies,当HTML5 API可用时浏览 ...
- Xcode中实现ARC和MRC混编
1.在Xcode中打开项目文件 2.选中项目名称 3.在右侧选择build phass 选项卡 4.选择 complite source 选项 5.选择要支持MRC编译的.m文件,双击 6.在弹出的框 ...
- Javascript模仿C语言的链表实现(增删改查),并且使用控制台输入输出
Js新手最近在研究Js数据结构,刚好看到链表实现这一块儿,觉得有些资料和自己理解的有冲突,于是借着自己以前一点点C语言的基础,用Javascript模仿了C的链表实现,并且用了process.stdi ...
- MySql免安装版配置方法
第1步:下载如下图安装包 第2步:解压mysql压缩包,然后进入解压后的安装包 将my-default.ini复制一份,并改名为my.ini(我已经完成) 把下面内容复制到my.ini,并保存 [cl ...
- Java 编译解释
JDK提供的主要开发工具有:编译程序,解释执行程序.调试程序.Applet执行程序.文档管理程序.包管理程序等. 1.编译程序:javac.exe,对应的javac命令将Java源程序转换为字节码. ...
- Codevs 3731 寻找道路 2014年 NOIP全国联赛提高组
3731 寻找道路 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找 ...
- 九度OJ 1081 递推数列 -- 矩阵二分乘法
题目地址:http://ac.jobdu.com/problem.php?pid=1081 题目描述: 给定a0,a1,以及an=p*a(n-1) + q*a(n-2)中的p,q.这里n >= ...
- 2015-01-27-从实验出发理解buffer与cache区别-吴伟顺
通过du(find) 与 cat 体现buffer与cache差异实验: 实验表明: 1 通常 buffer << cache 2 "文件系统"相关内容(ino ...
- javascript 事件对象
1.事件对象 用来记录一些事件发生时的相关信息的对象 A.只有当事件发生的时候才产生,只能在处理函数内部访问 B.处理函数运行结束后自动销毁2.如何获取事件对象 IE: window.even ...
- Sass中常用的函数
字符串函数 To-upper-case() 函数将字符串小写字母转换成大写字母 To-lower-case() 函数 与 To-upper-case() 刚好相反,将字符串转换成小写字母 数字函数 S ...