Jersey构建REST服务实战
来源:互联网 发布:数据库系统开发 编辑:程序博客网 时间:2024/05/20 19:28
由于参与移动项目,需要移动终端和服务端传递数据,经过技术对比分析,觉得基于REST模式的Web服务比较简洁易用,于是采取了Jersey开发, 一个Java规范下REST风格Web Service开发框架。最初选择的是Jersey1.8,后来由于运行环境的升级,导致Jersey也要升级到最新版本2.5.1。由于jersey2.x 版本实现的是JAX-RS 2.0规范,与 jersey1.x 相比有很大的改变,JSON转换也有不同。现把实现过程整理下来,供有需要的朋友参考!
一:环境介绍
(1)Jersey2.5.1
(2)Eclipse 3.7 +Tomcat 7 +JDK 7
二:搭建步骤
(1)通过地址https://jersey.java.net/ 下载jaxrs-ri-2.5.1.zip。
(2)通过Eclipse 创建动态工程RestDemo。
(3)解压jaxrs-ri-2.5.1.zip,拷贝下图列表中的JAR包到RestDemo\WebContent\WEB-INF\lib下。
(4)创建包路径 cn.com.vs.vo,创建User.java:
package cn.com.vs.vo;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class User {
private String name;
private String age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
(5)创建包路径 cn.com.vs.service,创建RestService.java:
package cn.com.vs.service;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import cn.com.vs.vo.User;
@Path("/restService")
public class RestService {
@GET
@Path("/getUserText")
@Produces(MediaType.TEXT_PLAIN)
public String getUserText() {
return "Hello,World!";
}
@GET
@Path("/getUserXml")
@Produces(MediaType.APPLICATION_XML)
public User getUserXml() {
User user = new User();
user.setName("snail");
user.setAge("22");
user.setSex("male");
return user;
}
@GET
@Path("/getUserJson")
@Produces(MediaType.APPLICATION_JSON)
public User getUserJson() {
User user = new User();
user.setName("snail");
user.setAge("22");
user.setSex("male");
return user;
}
}
(6)在 cn.com.vs 包路径下创建类 RestApplication.java
package cn.com.vs;
import org.glassfish.jersey.filter.LoggingFilter;
import org.glassfish.jersey.server.ResourceConfig;
public class RestApplication extends ResourceConfig {
public RestApplication() {
//服务类所在的包路径
packages("cn.com.vs.service");
//打印访问日志,便于跟踪调试,正式发布可清除
register(LoggingFilter.class);
}
}
(7)修改web.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>RestDemo</display-name>
<servlet>
<servlet-name>mobile</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>cn.com.vs.RestApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mobile</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
(8)在 Tomcat7 中部署运行,查看发布效果:
获取 文本数据:
获取XML数据:
获取JSON数据:http://localhost:8080/RestDemo/rest/restService/getUserJson ,会出现如下异常:
[org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class cn.com.vs.vo.User, genericType=class cn.com.vs.vo.User.] with root cause
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class cn.com.vs.vo.User, genericType=class cn.com.vs.vo.User.
说明:如果通过glassfish-4.0运行的话,是没任何问题的!如果通过tomcat,需要添加JSON转换器。
(9)解决获取JSON数据的异常,途径一:
a)下载 jackson-all-1.9.11.jar ,放到lib下。
b)修改RestApplication.java,内容如下:
package cn.com.vs;
import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
import org.glassfish.jersey.filter.LoggingFilter;
import org.glassfish.jersey.server.ResourceConfig;
public class RestApplication extends ResourceConfig {
public RestApplication() {
//服务类所在的包路径
packages("cn.com.vs.service");
//注册JSON转换器
register(JacksonJsonProvider.class);
//打印访问日志,便于跟踪调试,正式发布可清除
register(LoggingFilter.class);
}
}
(10)解决获取JSON数据的异常,途径二:
a) 下载 glassfish-4.0.zip ,解压,拷贝下列JAR到lib下:
b)修改RestApplication.java,内容如下:
package cn.com.vs;
import org.glassfish.jersey.filter.LoggingFilter;
import org.glassfish.jersey.jackson.JacksonFeature;
import org.glassfish.jersey.server.ResourceConfig;
public class RestApplication extends ResourceConfig {
public RestApplication() {
//服务类所在的包路径
packages("cn.com.vs.service");
//注册JSON转换器
register(JacksonFeature.class);
//打印访问日志,便于跟踪调试,正式发布可清除
register(LoggingFilter.class);
}
}
(11)选择上述途径中的一种,然后发布启动,获取JSON数据,即可成功,如下:
- Jersey构建REST服务实战
- Jersey构建REST服务实战
- Jersey构建REST服务实战
- Jersey构建REST服务实战
- 【用jersey构建REST服务】系列文章
- Jersey开发rest服务
- jersey搭建rest服务
- 使用Jersey构建rest接口
- Jersey构建RESTful服务
- Jersey搭建Rest web服务
- Jersey框架搭建Rest服务
- jersey 搭建rest风格服务
- Jersey 发布rest服务接口
- 采用gradle构建工具创建第一个基于jersey的Rest服务
- JAX-RS(基于Jersey) + Spring 4.x + MyBatis构建REST服务架构
- 用Jersey构建RESTful服务
- jersey+maven构建restful服务
- 用Jersey构建RESTful服务
- Springmvc maven环境配置
- Spring的JdbcTemplate语法详解
- Java 习题5 参考答案及解析(2)
- ES5中新增的Array方法详细说明
- oracle 备份及还原
- Jersey构建REST服务实战
- 用Python编写的身份证生成器
- MAVEN查看java源代码出现乱码
- go vender 的环境搭建和使用
- navMesh自动寻路
- lintcode/leetcode由易至难第12题:Majority Element
- Lock使用
- excel判断某一列中的数据是否在另一列中(含跨sheet)
- bootstrap datepicker日期插件汉化