基于RESTful类型的webService

来源:互联网 发布:网络里麻瓜是什么意思 编辑:程序博客网 时间:2024/06/03 15:20

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
这里写图片描述

发送请求:
这里写图片描述

原创粉丝点击