由于参与移动项目,需要移动终端和服务端传递数据,经过技术对比分析,觉得基于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 |
(5)创建包路径 cn.com.vs.service,创建RestService.java:
package cn.com.vs.service; import javax.ws.rs.GET; import cn.com.vs.vo.User; @Path("/restService") |
(6)在 cn.com.vs 包路径下创建类 RestApplication.java
package cn.com.vs; import org.glassfish.jersey.filter.LoggingFilter; public class RestApplication extends ResourceConfig { public RestApplication() { } |
(7)修改web.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <servlet-mapping> |
(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; public class RestApplication extends ResourceConfig { public RestApplication() { } |
(10)解决获取JSON数据的异常,途径二:
a) 下载 glassfish-4.0.zip ,解压,拷贝下列JAR到lib下:
b)修改RestApplication.java,内容如下:
package cn.com.vs; import org.glassfish.jersey.filter.LoggingFilter; public class RestApplication extends ResourceConfig { public RestApplication() { } |
(11)选择上述途径中的一种,然后发布启动,获取JSON数据,即可成功,如下: