您的当前位置:首页正文

j2ee培训:如何构建RESTful Web Service

2024-09-27 来源:伴沃教育

  1. 首先是实体类,注意其中的@XmlRootElement注解

  package com.googlecode.garbagecan.cxfstudy.jaxrs;

  import java.util.Date;

  import javax.xml.bind.annotation.XmlRootElement;

  @XmlRootElement(name="Customer")

  public class Customer {

  private String id;

  private String name;

  private Date birthday;

  public String getId() {

  return id;

  }

  public void setId(String id) {

  this.id = id;

  }

  public String getName() {

  return name;

  }

  public void setName(String name) {

  this.name = name;

  }

  public Date getBirthday() {

  return birthday;

  }

  public void setBirthday(Date birthday) {

  this.birthday = birthday;

  }

  @Override

  public String toString() {

  return org.apache.commons.lang.builder.ToStringBuilder.reflectionToString(this);

  }

  }

  2. RESTful Web Service接口类,可以通过修改@Produces注解来声明暴露接口返回的json还是xml数据格式

  package com.googlecode.garbagecan.cxfstudy.jaxrs;

  import javax.ws.rs.GET;

  import javax.ws.rs.Path;

  import javax.ws.rs.PathParam;

  import javax.ws.rs.Produces;

  import javax.ws.rs.QueryParam;

  @Path(value = "/customer")

  @Produces("*/*")

  //@Produces("application/xml")

  //@Produces("application/json")

  public interface CustomerService {

  @GET

  @Path(value = "/{id}/info")

  Customer findCustomerById(@PathParam("id")String id);

  @GET

  @Path(value = "/search")

  Customer findCustomerByName(@QueryParam("name")String name);

  }

  3. RESTful Web Service接口实现类

  package com.googlecode.garbagecan.cxfstudy.jaxrs;

  import java.util.Calendar;

  public class CustomerServiceImpl implements CustomerService {

  public Customer findCustomerById(String id) {

  Customer customer = new Customer();

  customer.setId(id);

  customer.setName(id);

  customer.setBirthday(Calendar.getInstance().getTime());

  return customer;

  }

  public Customer findCustomerByName(String name) {

  Customer customer = new Customer();

  customer.setId(name);

  customer.setName(name);

  customer.setBirthday(Calendar.getInstance().getTime());

  return customer;

  }

  }

  4. Server端代码

  package com.googlecode.garbagecan.cxfstudy.jaxrs;

  import org.apache.cxf.interceptor.LoggingInInterceptor;

  import org.apache.cxf.interceptor.LoggingOutInterceptor;

  import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;

  public class MyServer {

  public static void main(String[] args) throws Exception {

  JAXRSServerFactoryBean factoryBean = new JAXRSServerFactoryBean();

  factoryBean.getInInterceptors().add(new LoggingInInterceptor());

  factoryBean.getOutInterceptors().add(new LoggingOutInterceptor());

  factoryBean.setResourceClasses(CustomerServiceImpl.class);

  factoryBean.setAddress("http://localhost:9000/ws/jaxrs");

  factoryBean.create();

  }

  }

  5. Client端代码

  package com.googlecode.garbagecan.cxfstudy.jaxrs;

  import org.apache.commons.httpclient.HttpClient;

  import org.apache.commons.httpclient.HttpStatus;

  import org.apache.commons.httpclient.methods.GetMethod;

  public class MyClient {

  public static void main(String[] args) throws Exception {

  go("http://localhost:9000/ws/jaxrs/customer/1/info");

  go("http://localhost:9000/ws/jaxrs/customer/search?name=abc");

  }

  private static void go(String url) throws Exception {

  HttpClient client = new HttpClient();

  GetMethod method = new GetMethod(url);

  int statusCode = client.executeMethod(method);

  if (statusCode != HttpStatus.SC_OK) {

  System.err.println("Method failed: " + method.getStatusLine());

  }

  byte[] responseBody = method.getResponseBody();

  System.out.println(new String(responseBody));

  }

  }

  6.测试

  首先运行MyServer类,然后运行MyClient类来验证Web Service。

1.

2.

3.

4.

5.

6.

7.

8.

显示全文