JAX-RS概述
JAX-RS是Java提供用于开发RESTful Web服务基于注解(annotation)的API。JAX-RS旨在定义一个统一的规范,使得Java程序员可以使用一套固定的接口来开发REST应用,避免了依赖第三方框架。同时JAX-RS使用POJO编程模型和基于注解的配置并集成JAXB,可以有效缩短REST应用的开发周期。JAX-RS只定义RESTful API,具体实现由第三方提供,如Jersey、Apache CXF等。
JAX-RS包含近五十多个接口、注解和抽象类:
- javax.ws.rs包含用于创建RESTful服务资源的高层次(High-level)接 口和注解。
- javax.ws.rs.core包含用于创建RESTful服务资源的低层次(Low-level)接口和注解。
- javax.ws.rs.ext包含用于扩展JAX-RS API支持类型的APIs。
JAX-RS常用注解:
- @Path:标注资源类或方法的相对路径。
- @GET、@PUT、@POST、@DELETE:标注方法的HTTP请求类型。
- @Produces:标注返回的MIME媒体类型。
- @Consumes:标注可接受请求的MIME媒体类型。
- @PathParam、@QueryParam、@HeaderParam、@CookieParam、@MatrixParam、@FormParam:标注方法的参数来自于HTTP请求的位置。@PathParam来自于URL的路径,@QueryParam来自于URL的查询参数,@HeaderParam来自于HTTP请求的头信息,@CookieParam来自于HTTP请求的Cookie。
服务端
下面用CXF发布一个图书馆RESTFul服务,实现书籍的查询、添加、删除和修改。CXF发布RESTFul服务需要引入cxf-rt-frontend-jaxrs,pom.xml配置如下。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.rvho</groupId>
<artifactId>cxfrestserver</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<!-- CXF版本 -->
<cxf.version>3.1.1</cxf.version>
</properties>
<dependencies>
<!-- CXF -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>${cxf.version}</version>
</dependency>
<!-- 如果在tomcat或者其他servlet容器中发布服务,不需要引用cxf-rt-transports-http-jetty -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>${cxf.version}</version>
</dependency>
<!-- End CXF -->
</dependencies>
</project>
书籍XML格式
<Book>
<author>尼古拉·奥斯特洛夫斯基</author>
<id>10</id>
<name>钢铁是怎样炼成的?</name>
<price>3.0</price>
</Book>
书籍实体类
package com.rvho.rest.server;
import javax.xml.bind.annotation.XmlRootElement;
/**
* 书籍实体类
* @author accountwcx@qq.com
*/
@XmlRootElement(name = "Book")
public class Book {
//id
private String id;
//书名
private String name;
//作者
private String author;
//价格
private Double price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author