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(转)的更多相关文章

  1. Jersey+Spring+Maven环境搭建

    第一步:创建一个Maven工程.加入Jersey.Spring.Jersey+Spring的依赖包,以及内嵌的Tomcat7插件: pom.xml文件如图所示: <project xmlns=& ...

  2. 集成框架 javaweb开发平台ssmy_m(生成代码) java struts2 mybatis spring maven jquery

    网页地址 http://blog.csdn.net/lpy3654321/article/details/31841573 项目设想,在项目开发中,我们的开发者大多数时间都在反复开发 相同的keywo ...

  3. Hession集成Spring + maven依赖通讯comm项目 + 解决@ResponseBody中文乱码

    hessian结合spring的demo         hessian的maven依赖: <!-- hessian --> <dependency>         < ...

  4. 详解intellij idea搭建SSM框架(spring+maven+mybatis+mysql+junit)(下)

    在上一篇(详解intellij idea 搭建SSM框架(spring+maven+mybatis+mysql+junit)(上))博文中已经介绍了关于SSM框架的各种基础配置,(对于SSM配置不熟悉 ...

  5. 02.基于IDEA+Spring+Maven搭建测试项目--详细过程

    一.背景介绍 1.1公司相关技术 Git:是一款免费的开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,方便多人集成开发 Maven:是基于项目对象模型(POM),可以通过一小段描述信息 ...

  6. 【Spring学习】在Spring+Maven环境中使用Junit Test

    在Spring+Maven环境中使用Junit Test 前言 以前我是很讨厌写测试代码的,总觉得测试用例是测试人员写的,现在想想自己真是Too yuong too simple,接触开发多了之后发现 ...

  7. 通过idea 打包 spring maven项目打包为可执行jar包

    用assembly打包一直报错: shangyanshuodeMacBook-Pro:target shangyanshuo$ java -jar jobscrawler-1.0-SNAPSHOT-j ...

  8. java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener,环境Spring+Maven

    记录一下莫名出现的错误.Spring+Maven+STS. 严重: Error configuring application listener of class org.springframewor ...

  9. spring maven pom.xml设置

    spring pom.xml设置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns= ...

随机推荐

  1. Hyper-V Windows 8.1 & Windows Server 2012 R2 Q&A

    从Windows8开始,x64位系统自带Hyper-V功能,很多开发者和专业用户往往希望利用的Microsoft提供的这一免费功能,但是微软在这方面并不是最佳. 主要写几个大家经常遇到的问题. Win ...

  2. iOS-开发日志-UIimageView

      UIImageView属性   1.Image 设置图片,默认显示 UIImageView *_imageView = [[UIImageView alloc]init]; _imageView. ...

  3. c语言中的结构体为值类型,当把一个结构体赋值给另一个结构体时,为值传递

    #include <stdio.h> int main() { struct person { int age; }; }; //值传递,将p1中所有成员变量的值赋值个p2中对应的成员变量 ...

  4. 关于网页强制被跳转到wpkg.org的解决

    今天登陆MIT的网站看一篇文章,在进入到页面的时候,网页就会自动跳转到wpkg.org这个网页,查了下据说是DNS被污染了,暂时还是不是很清楚,先把问题解决了. 方法: 在C:\WINDOWS\sys ...

  5. ASP.NET设计模式(一)、适配器模式、依赖注入依赖倒置、空对象模式

    鸟随凤鸾,人伴贤良,得以共之,我之幸也.说的是鸟随着鸾凤可以飞的更高远,人和比自己境界高的相处,自己也会得到熏染进步. 一.概述 分享出来简单的心得,望探讨 依赖倒置 依赖注入 Adapter模式 N ...

  6. Fedora 17 修改GRUB启动菜单顺序

    Fedora 16采用GRUB2,因此启动菜单编辑方式与以前版本有所不同 设置默认启动Windows 1. 首先找到Windows的menuentry # cat   /boot/grub2/grub ...

  7. 【转】Ext.ajax.request 中的success和failure

    原文链接:Ext.ajax.request 中的success和failure Ajax request对象的success事件表示request过程中没有发生错误,和自己的业务逻辑无关, 如果访问不 ...

  8. Python 集合(set)使用

    1.python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差 ...

  9. 解决windows下eclipse中android项目关联android library project

    关于 在项目中导入 关联 library project 的问题,有时候会出现如下状况 在windows系统下,library project必须和project处于相同的盘符中 如果在不同盘符,pr ...

  10. POJ 1837 Balance 01背包

    题目: http://poj.org/problem?id=1837 感觉dp的题目都很难做,这道题如果不看题解不知道憋到毕业能不能做出来,转化成了01背包问题,很神奇.. #include < ...