0
点赞
收藏
分享

微信扫一扫

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

@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.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​​


  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. new User();  
  22. 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. 2);  
  34. "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

举报

相关推荐

Jersey实例操作

0 条评论