文档章节

章三、Spring+Jersey搭建REST服务器

十月阳光
 十月阳光
发布于 2015/04/21 10:59
字数 783
阅读 270
收藏 4

前两章已经写了如何使用jersey搭建REST接口服务器,本章将简单讲解如何使用jersey+Spring搭建REST接口服务器。

1、服务器

    1.1 导入所需JAR包

    

    jersey相关包的maven依赖

    

<!-- jersey客户端需要的包 -->
		<dependency>
			<groupId>com.sun.jersey</groupId>
			<artifactId>jersey-client</artifactId>
			<version>1.18.1</version>
		</dependency>
		<dependency>
			<groupId>com.sun.jersey</groupId>
			<artifactId>jersey-core</artifactId>
			<version>1.18.1</version>
		</dependency>
		<!-- jersey服务器端需要的包 -->
		<dependency>
			<groupId>com.sun.jersey</groupId>
			<artifactId>jersey-bundle</artifactId>
			<version>1.18.1</version>
		</dependency>
		<dependency>
			<groupId>com.sun.jersey</groupId>
			<artifactId>jersey-json</artifactId>
			<version>1.18.1</version>
		</dependency>
		<!-- genson用于帮助服务器处理JSON数据的重要JAR包 -->
		<dependency>
			<groupId>com.owlike</groupId>
			<artifactId>genson</artifactId>
			<version>1.3</version>
		</dependency>
		<!-- jersey和spring继承需要的JAR包 -->
		<dependency>
			<groupId>com.sun.jersey.contribs</groupId>
			<artifactId>jersey-spring</artifactId>
			<version>1.18.1</version>
		</dependency>
		<dependency>
			<groupId>net.sf.json-lib</groupId>
			<artifactId>json-lib</artifactId>
			<classifier>jdk15</classifier>
			<version>2.4</version>
		</dependency>
		<dependency>
			<groupId>commons-lang</groupId>
			<artifactId>commons-lang</artifactId>
			<version>2.6</version>
		</dependency>



    1.2 编写Spring配置文件:spring.xml

    

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
">
	
	<context:component-scan base-package="com.sunnysoft.rest" />
	
</beans>
    这里的spring配置文件很简单,因为我们现在是写demo,所以这里只需要启用spring的注解扫描就可以了。

    1.3 编写web.xml,其实就博主浅显的理解,spring和jersey整合,也就是web.xml中有变化,当然这只是在demo的级别,深入的话,还有待学习。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance  http://www.springmodules.org/schema/cache/springmodules-cache.xsd http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
    http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd       
     ">

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath*:spring*.xml</param-value>
	</context-param>

	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>

	<servlet>
		<servlet-name>Jersey REST Service</servlet-name>
		<servlet-class>
			com.sun.jersey.spi.spring.container.servlet.SpringServlet
		</servlet-class>

		<init-param>
			<!-- 系统启动时扫描的包的路径-->
			<param-name>
				com.sun.jersey.config.property.packages
			</param-name>
			<param-value>com.sunnysoft.rest.controller</param-value>
		</init-param>

		<init-param>
			<param-name>
				com.sun.jersey.api.json.POJOMappingFeature
			</param-name>
			<param-value>true</param-value>
		</init-param>

		<load-on-startup>1</load-on-startup>

	</servlet>

	<servlet-mapping>
		<servlet-name>Jersey REST Service</servlet-name>
		<url-pattern>/rest/*</url-pattern>
	</servlet-mapping>

</web-app>
    1.4 编写服务器接口入口
package com.sunnysoft.rest.controller;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.springframework.stereotype.Component;

import com.sunnysoft.rest.model.User;

/**
 * jersey+Spring 搭建服务器 demo控制器
 * @author ll
 * @version $Id: DemoController.java, v 0.1 Apr 21, 2015 10:29:10 AM ll Exp $
 */
@Path("/demo")
@Component
public class DemoController {

    //@Path 定义资源基 URI。由上下文根和主机名组成,资源标识符类似于 http://localhost:8080/Jersey/rest/demo
    //@GET:这意味着以下方法可以响应 HTTP GET 方法。
    //@Produces:描述响应内容的格式
    //@Consumes:声明该方法使用什么样的数据格式。

    @POST
    @Path("/getuser")
    @Produces(MediaType.APPLICATION_JSON)// json格式响应给客户端
    @Consumes(MediaType.APPLICATION_JSON)// json格式接收客户端数据
    public User getUser(User user) {
        System.out.println("Get back the user that client sent to server.");
        System.out.println("User's information is : name = " + user.getName() + " , gender = "
                           + user.getGender());
        System.out.println("Now, change the gender to unknown.");
        user.setGender("unknown");
        System.out.println("Now user's information is : name = " + user.getName() + " , gender = "
                           + user.getGender());
        return user;
    }

}


2、客户端(类似章二)

    2.1 导入JAR包

    2.2 编码


package com.eya.restful.restTest;

import java.net.URI;

import javax.ws.rs.core.MediaType;

import net.sf.json.JSONObject;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;

/**
 *
 * @author ll Develop on : 2015年4月20日
 */
public class RestTest {

    public static void main(String[] args) {
	String path = "http://localhost:8090/RestSpringServer/rest/demo/getuser";
	Client client = null;
	JSONObject param = new JSONObject();
	param.put("name", "Alice");
	param.put("gender", "female");
	try {
	    URI uri = new URI(path);
	    client = Client.create();
	    WebResource webResource = client.resource(uri);

	    ClientResponse response = webResource.type(MediaType.APPLICATION_JSON).post(
		    ClientResponse.class, param.toString());

	    System.out.println(response.getStatus());
	    System.out.println("result : " + response.getEntity(String.class));

	} catch (Exception e) {
	    e.printStackTrace();
	}
    }
}


运行结果:

    服务器端:

    

    客户端:

    



© 著作权归作者所有

十月阳光

十月阳光

粉丝 34
博文 94
码字总数 54658
作品 0
成都
程序员
私信 提问
Spray.io搭建Rest服务

Spray.io尝试 使用Spray.io搭建Rest服务 Spray.io搭建Rest — 支持Twirl模板并部署 Spray.io搭建Rest — 支持WebSocket 使用Spray.io搭建Rest服务 Spray 是一个开源的 REST/HTTP 工具包和底层...

ForEleven
2014/04/28
6.7K
10
关于Activiti流程中心问题

@咖啡兔 你好,想跟你请教个问题: 读了您的书,看到activiti-rest那章,里面有个小节讲到搭建流程中心,但是篇幅比较短,我有个困惑,如何通过一套activiti-rest接口访问多个流程引擎数据库...

crystonesc
2015/03/03
635
0
Moco 0.11.0 发布,模拟服务器

我很高兴地宣布,Moco 0.11.0发布了。 Moco是什么? Moco是一个可以轻松搭建测试服务器的框架/工具/程序库。 变更 本次发布主要增加了两个大的特性:REST API 和 JUnit 集成。 众所周知,RES...

dreamhead
2016/05/24
3.5K
7
如何使用JFINAL搭建REST接口服务器

如何使用JFINAL搭建REST接口服务器

JY西雅图图图图图
2016/02/18
383
0
基于spring for android做了一个restful形式的webService demo,发现第一次连接的时候特别慢,以后连接就很快了,神马原因?

android客户端向基于rest形式的webService搭建的服务器端访问的时候第一次速度很慢,接下来的访问速度就很快了。

巴顿
2013/09/19
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
1K
12
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
16
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部