Jersey 2.17 + Tomcat + Maven 构建restful service 实例

jersey1.X的版本是sun公司提供的独立的jar包,在2.X版本中,已经将jersey放在glassfish下。同时Java也支持jersey的webservice,支持webservice的注解的包都在javax.ws.rs.*包中。

jersey常用注解解释:                                                                             

 

Annotation 作用 说明
@GET查询请求 相当于数据库的查询数据操作
@POST插入请求 相当于数据库的插入数据操作
@PUT更新请求 相当于数据库的更新数据操作
@DELETE删除请求 相当于数据的删除数据操作
@Pathuri路径 定义资源的访问路径,client通过这个路径访问资源。比如:@Path("user")
@Produces指定返回MIME格式 资源按照那种数据格式返回,可取的值有:MediaType.APPLICATION_XXX。比如:@Produces(MediaType.APPLICATION_XML)
@Consumes接受指定的MIME格式 只有符合这个参数设置的请求再能访问到这个资源。比如@Consumes("application/x-www-form-urlencoded")
@PathParamuri路径参数 写在方法的参数中,获得请求路径参数。比如:@PathParam("username")  String userName
@QueryParamuri路径请求参数 写在方法的参数中,获得请求路径附带的参数。比如:@QueryParam("desc")  String desc
@DefaultValue设置@QueryParam参数的默认值如果@QueryParam没有接收到值,就使用默认值。比如:@DefaultValue("description") @QueryParam("desc") String desc
@FormParamform传递的参数 接受form传递过来的参数。比如:@FormParam("name")  String userName
@BeanParam通过Bena的形式传递参数 接受client传递的bean类型的参数,同时这个bean可以在属性上配置@FormParam用以解决client的属性名称和bean的属性名称不一致的问题。比如:@BeanParam  User user
@Context获得一些系统环境信息通过@Context可以获得以下信息:UriInfo、ServletConfig、ServletContext、HttpServletRequest、HttpServletResponse和HttpHeaders等
@XmlRootElement将bean转换为xml 如果要讲bean以xml或json的格式返回,必须要这个注解。比如:

@XmlRootElement

public class User{...}

@XmlElements   
@XmlElement   

1.首先构建一个Maven webapp工程,这个很简单就略过了。

2.在pom.xml里面添加jersey 2.17的依赖:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <dependency>  
  2.    <groupId>org.glassfish.jersey.containers</groupId>  
  3.    <artifactId>jersey-container-servlet</artifactId>  
  4.    <version>2.17</version>  
  5. </dependency>  
  6. <dependency>  
  7.    <groupId>org.glassfish.jersey.core</groupId>  
  8.    <artifactId>jersey-client</artifactId>  
  9.    <version>2.17</version>  
  10. </dependency>  
  11. <dependency>  
  12.    <groupId>org.glassfish.jersey.media</groupId>  
  13.    <artifactId>jersey-media-json-jackson</artifactId>   
  14.    <version>2.17</version>  
  15. </dependency>  


3.在web.xml里面添加jersey servlet的描述:

<servlet>
<servlet-name>JerseyServlet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<!-- 配置自己的资源加载类去加载资源 -->
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.cisdi.jersey.api.ApplicationAPI</param-value>
</init-param>
<!-- 配置默认的资源包路径,使用默认的配置类去加载资源 -->
<!-- <init-param> -->
<!-- <param-name>jersey.config.server.provider.packages</param-name> -->
<!-- <param-value>com.cisdi.jersey.api</param-value> -->
<!-- </init-param> -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JerseyServlet</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
上面有两种加载资源的方式,一种是使用自己的资源加载器去加载资源,需要给出自己资源加载器的位置。另一种是使用默认的资源加载器加载,需要给出资源所在的package。个人主张第一种,写一个自己的资源加载器去加载想要加载的资源,这样感觉可控性强一点,接下来会介绍这个资源加载器如何编写。

编写自己加载器:

public class ApplicationAPI extends ResourceConfig {
public ApplicationAPI() {
// 加载resources
register(HelloResource.class);
register(UserResource.class);
 
// 注册数据转换器
register(JacksonJsonProvider.class);
 
// 注册日志
register(LoggingFilter.class);
 
}
}
这个类就是将各种资源加载进来,暴露给client。之前说道使用自己的资源加载器可控性强的特点就是可以除了加载业务资源以外,还可以加载日子和其他的需要一些工具资源等等。或者package下的某个资源不想被暴露,就不要加载进来就可以了。
view pla

4.编写代码:

RestfulDemo.java:(资源)

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @Path("/demo")    
  2. public class RestfulDemo {  
  3.         @GET    
  4.         @Produces(MediaType.TEXT_PLAIN)    
  5.         public String sayHello() {    
  6.             return "Hello World!" ;    
  7.         }    
  8.          
  9.             
  10.         @GET    
  11.         @Path("/{param}")      
  12.         @Produces("text/plain;charset=UTF-8")    
  13.         public String sayHelloToUTF8(@PathParam("param") String username) {    
  14.             return "Hello " + username;    
  15.         }    
  16.           
  17.         @GET    
  18.         @Path("/get")      
  19.         @Produces(MediaType.APPLICATION_JSON)    
  20.         public User sayHelloToJson(@QueryParam("username") String username) {    
  21.             User user= new User();  
  22.             user.setId(1);  
  23.             user.setName(username);  
  24.             return user;    
  25.         }    
  26.           
  27.           
  28.         @POST  
  29.         @Path("/update")      
  30.         @Consumes(MediaType.APPLICATION_JSON)  
  31.         @Produces(MediaType.APPLICATION_JSON)    
  32.         public User updateUser(User user) {    
  33.             user.setId(2);  
  34.             user.setName("update name:"+user.getName());  
  35.             return user;    
  36.         }  
  37. }  
User.java:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class User  implements Serializable {  
  2.     private static final long serialVersionUID = 1L;  
  3.     private int id;  
  4.     private String name;  
  5.     public int getId() {  
  6.         return id;  
  7.     }  
  8.     public void setId(int id) {  
  9.         this.id = id;  
  10.     }  
  11.     public String getName() {  
  12.         return name;  
  13.     }  
  14.     public void setName(String name) {  
  15.         this.name = name;  
  16.     }  
  17.   
  18. }  

4.把webapp打成war包,发布到tomcat中去。

访问http://localhost:8080/rest/demo,页面打出hello world.

访问http://localhost:8080/rest/demo/zhangsan ,页面打出hello zhangsan

访问http://localhost:8080/rest/demo/get?username=zhangsan ,页面返回User对象的json格式

访问http://localhost:8080/rest/demo/update,post提交user对象的json格式,返回更新user对象的json格式。


5.注意:

JDK请用1.7以上

Tomcat请用7.0以上

参考:http://dyygusi.iteye.com/blog/2148029?utm_source=tuicool&utm_medium=referral

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赶路人儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值