RESTful是基于jax-rs的WebService.它即支持XML也支持JSON. JAX-RS是JAVA EE6 引入的一个新技术。 JAX-RS即Java API for RESTful Web Services的简写,是一个Java 编程语言的应用程序接口,支持按照表述性状态转移(REST)架构风格创建Web服务。JAX-RS使用了Java SE5引入的Java标注来简化Web服务的客户端和服务端的开发和部署。 JAX-RS提供了一些标注将一个资源类,一个POJOJava类,封装为Web资源。标注包括:
@Path,标注资源类或者方法的相对路径 @GET,@PUT,@POST,@DELETE,标注方法是HTTP请求的类型。 @Produces,标注返回的MIME媒体类型 xml,json @Consumes,标注可接受请求的MIME媒体类型 @PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam,分别标注方法的参数来自于HTTP请求的不同位置,例如@PathParam来自于URL的路径,@QueryParam来自于URL的查询参数,@HeaderParam来自于HTTP请求的头信息,@CookieParam来自于HTTP请求的Cookie。RESTful的webService包括以下步骤: 第一步:添加jsr311.jar(支持JSR)文件 和jettison-1.3.jar(解析JSON)。此文件是jdk1.6提供的新支持包。支持json格式的WebService. 必须。 第二步:必须 - 创建一个JavaBean.并添加@XmlRootElement注解。 第三步:必须 - 创建一个服务类,并使用@Path等注解进行标注。 第四步:使用JaxRsServerFactoryBean发布WebService. 必须。 可以给JaxRsServerFactoryBean添加消息拦截器 – 可选。 发布成功以后,可以输入以下地址访问XML描述文件,注意此描述文件不能生成本地代码。 http://localhost:9005/users?_wadl&_type=xml 注意上面的参数是:_wadl 而不是wsdl 第五步:客户端使用HttpClient进行调用。 第六步:或是客户端使用Ajax调用。
代码示例:
package com.cxf.my; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import com.cxf.bean.User; @Path(value="/rs") @Produces(value={"application/xml","application/json"}) public class Restful { @GET @Path(value="/say/{name}") //http://http://127.0.0.1:8080/rs/say/hello public User say(@PathParam("name")String nm){ System.err.println("Hello...."+nm); User u = new User(); u.setName("你好:"+nm); u.setAge(99); return u; } public static void main(String[] args) { //RESTful的请求 JAXRSServerFactoryBean bean = new JAXRSServerFactoryBean(); bean.setAddress("http://127.0.0.1:8080"); bean.setServiceBean(new Restful()); bean.create(); } }如果需要返回值,必须是一个JavaBean,且必须是添加了@XmlRootElement注解的,否则不能正常解析
package com.cxf.bean; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name="user") public class User { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User [name=" + name + ", age=" + age + "]"; } }运行结果: 查看wsdl
发送请求: