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的依赖:
- <dependency>
- <groupId>org.glassfish.jersey.containers</groupId>
- <artifactId>jersey-container-servlet</artifactId>
- <version>2.17</version>
- </dependency>
- <dependency>
- <groupId>org.glassfish.jersey.core</groupId>
- <artifactId>jersey-client</artifactId>
- <version>2.17</version>
- </dependency>
- <dependency>
- <groupId>org.glassfish.jersey.media</groupId>
- <artifactId>jersey-media-json-jackson</artifactId>
- <version>2.17</version>
- </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:(资源)
- @Path("/demo")
- public class RestfulDemo {
- @GET
- @Produces(MediaType.TEXT_PLAIN)
- public String sayHello() {
- return "Hello World!" ;
- }
- @GET
- @Path("/{param}")
- @Produces("text/plain;charset=UTF-8")
- public String sayHelloToUTF8(@PathParam("param") String username) {
- return "Hello " + username;
- }
- @GET
- @Path("/get")
- @Produces(MediaType.APPLICATION_JSON)
- public User sayHelloToJson(@QueryParam("username") String username) {
- User user= new User();
- user.setId(1);
- user.setName(username);
- return user;
- }
- @POST
- @Path("/update")
- @Consumes(MediaType.APPLICATION_JSON)
- @Produces(MediaType.APPLICATION_JSON)
- public User updateUser(User user) {
- user.setId(2);
- user.setName("update name:"+user.getName());
- return user;
- }
- }
- public class User implements Serializable {
- private static final long serialVersionUID = 1L;
- private int id;
- private String name;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
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