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 删除请求 相当于数据的删除数据操作
@Path uri路径 定义资源的访问路径,client通过这个路径访问资源。比如:@Path("user")
@Produces 指定返回MIME格式 资源按照那种数据格式返回,可取的值有:MediaType.APPLICATION_XXX。比如:@Produces(MediaType.APPLICATION_XML)
@Consumes 接受指定的MIME格式 只有符合这个参数设置的请求再能访问到这个资源。比如@Consumes("application/x-www-form-urlencoded")
@PathParam uri路径参数 写在方法的参数中,获得请求路径参数。比如:@PathParam("username")  String userName
@QueryParam uri路径请求参数 写在方法的参数中,获得请求路径附带的参数。比如:@QueryParam("desc")  String desc
@DefaultValue 设置@QueryParam参数的默认值 如果@QueryParam没有接收到值,就使用默认值。比如:@DefaultValue("description") @QueryParam("desc") String desc
@FormParam form传递的参数 接受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
 
  1. <dependency>  
  2.    <groupId>org.glassfish.jersey.containersgroupId>  
  3.    <artifactId>jersey-container-servletartifactId>  
  4.    <version>2.17version>  
  5. dependency>  
  6. <dependency>  
  7.    <groupId>org.glassfish.jersey.coregroupId>  
  8.    <artifactId>jersey-clientartifactId>  
  9.    <version>2.17version>  
  10. dependency>  
  11. <dependency>  
  12.    <groupId>org.glassfish.jersey.mediagroupId>  
  13.    <artifactId>jersey-media-json-jacksonartifactId>   
  14.    <version>2.17version>  
  15. dependency>  


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


JerseyServlet
org.glassfish.jersey.servlet.ServletContainer


javax.ws.rs.Application
com.cisdi.jersey.api.ApplicationAPI






1


JerseyServlet
/api/*
上面有两种加载资源的方式,一种是使用自己的资源加载器去加载资源,需要给出自己资源加载器的位置。另一种是使用默认的资源加载器加载,需要给出资源所在的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
 
  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
 
  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

你可能感兴趣的:(java)