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. 那天有个小孩跟我说LINQ(二)转载

    1  LINQ TO Objects续(代码下载)      新建项目 linq_Ch2控制台程序,新建一个Entity文件夹    1.1 学生成绩查询(练习Join)         有三张表如下 ...

  2. SetTimer的使用

    SetTimer函数用于创建一个计时器,KillTimer函数用于销毁一个计时器.计时器属于系统资源,使用完应及时销毁. SetTimer的函数原型如下:UINT_PTR SetTimer( HWND ...

  3. Deep Learning 学习随记(三)续 Softmax regression练习

    上一篇讲的Softmax regression,当时时间不够,没把练习做完.这几天学车有点累,又特别想动动手自己写写matlab代码 所以等到了现在,这篇文章就当做上一篇的续吧. 回顾: 上一篇最后给 ...

  4. 不一样的编码风格--Lambda表达式

    Lambda表达式也是C#3.0中最重要的特性之一. 1.Lambda表达式的简介 Lambda表达式可以理解为一个匿名方法,它可以包含表达式和语句,并且用于创建委托或转换为表达式树.在使用Lambd ...

  5. 一、VSTO概述

    一.什么是VSTO? VSTO = Visual Studo Tools for Office,是.net平台下的Office开发技术.相对于传统的VBA(Visual Basic Applicati ...

  6. Get AD user 的三种方法

    一. 通过AccountManagement 程序集(System.DirectoryServices.AccountManagement) acountManagement 包含有: 1. User ...

  7. JS实现回到页面顶部动画效果 2016.03.23

    最近在模仿各大网站写页面样式和交互,发现好多都有回到顶部的需要,所以写了一下js,记录下来. 发现还可以添加从快到慢的动画效果和随时下拉滚动条停止滚动的功能, 参考了imooc上相关课程,最终实现JS ...

  8. Glibc和GCC,ARM-LINUX-GCC的关系

    看到有些贴子/blog上提到「Glibc编译器」,这是个错误的用语.Glibc不是编译器,Glibc不是编译器,Glibc不是编译器.重要的事情说三遍.GCC才是编译器.

  9. python相关博客

    入门:http://www.pythontip.com/ Python之禅--大道至简 美胜于丑,显胜于隐,简胜于繁,繁胜于杂,平胜于迭,疏胜于密,读胜于写...名可名, 请常名 http://www ...

  10. 《C语言学习笔记》指针数组及其应用

    C语言中,最灵活但又容易出错的莫过于指针了.而指针数组,是在C中很常见的一个应用.指针数组的意思是说,这个数组存储的所有对象都为指针.除了存储对象为指针,即一个地址外,其它操作和普通数组完全一样. # ...