`
ajax
  • 浏览: 252139 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Restlet实战(五)创建对应PUT、POST、DELETE的方法

    博客分类:
  • REST
阅读更多

之前的系列文章,为了测试一些功能点,所以只选择get这种情况,本文将添加另外三种主要的方法POST, PUT, DELETE.对应我们的业务方法是新增、修改、删除。此文对上篇文章示例代码进行修改。

 

首先在CustomerResource里加入代码:

 

@Override
public boolean allowPut() {
	return true;
}	

@Override
public boolean allowPost() {
	return true;
}

@Override 
public boolean allowDelete() {
	return true;
}

@Override
public void storeRepresentation(Representation entity) throws ResourceException {
	Form form = new Form(entity);
	Customer customer = new Customer();
	customer.setName(form.getFirstValue("name"));
	customer.setRemarks("This is an example which receives request with put method and save data");
	
	customerDAO.saveCustomer(customer);
}

@Override
public void acceptRepresentation(Representation entity) throws ResourceException {
	Form form = new Form(entity);
	Customer customer = new Customer();
	customer.setId(customerId);
	customer.setName(form.getFirstValue("name"));
	customer.setRemarks("This is an example which receives request with post method and update data");
	
	customerDAO.updateCustomer(customer);
}

@Override
public void removeRepresentations() throws ResourceException {
	customerDAO.deleteCustomer(customerId);
}

 

 

这里稍微说明一下,如果你想增加put方法,则需要override方法allowPut,并使之返回值为true,同样,对post,delete是一样的,如果你觉得指定三个方法太多,那么你可以用下面的代码来替代上面三个方法:

 

@Override 
public boolean isModifiable() {
        return true;
}

 

在数据层的接口类和实现类里面加入相应的调用代码:

 

public interface CustomerDAO {
	public String getCustomerById(String id);
	public void saveCustomer(Customer customer);
	public void updateCustomer(Customer customer);
	public void deleteCustomer(String id);
}

 

public class CustomerDAOImpl implements CustomerDAO{
	Logger logger = Logger.getLogger(this.getClass().getName());
	
	public String getCustomerById(String id){
		//get other information through id such as name, no, address etc.
		String name = "ajax";
		String address=  "Shanghai";
		return "The customer name is " + name + " and he is from " + address;
	}
	
	public void saveCustomer(Customer customer){
		//save the customer data into db
		System.out.println("save the infomation of customer into database");
	}
	
	public void updateCustomer(Customer customer){
		System.out.println("update the customer whose id is " + customer.getId());
	}
	
	public void deleteCustomer(String id){
		System.out.println("delete the customer whose id is " + id);
	}
	
}

 

 

为了封装传递的参数,创建一个Customer BO:

 

public class Customer implements Serializable{
	private static final long serialVersionUID = 4021273041291957638L;
	private String id;
	private String name;
	private String phone;
	private String address;
	private String email;
	private String remarks;
	
	//getter and setter method
}

 

下面使用Restlet提供的客户端来测试上述代码:

 

public class CustomerResourceTest extends TestCase{
	
	public static void testStoreRepresentation(){
		Client client = new Client(Protocol.HTTP);
		Reference itemsUri = new Reference("http://localhost:8080/restlet/resources/customers/1");
		Form form = new Form();
		form.add("name", "Ajax");
		form.add("description", "test store presentation");
		Representation rep = form.getWebRepresentation();
		Response response = client.put(itemsUri, rep);
		assertTrue(response.getStatus().isSuccess());
	}
	
	public static void testAcceptRepresentation(){
		Client client = new Client(Protocol.HTTP);
		Reference itemsUri = new Reference("http://localhost:8080/restlet/resources/customers/1");
		Form form = new Form();
		form.add("name", "Ajax_cn");
		form.add("description", "test update presentation");
		Representation rep = form.getWebRepresentation();
		Response response = client.post(itemsUri, rep);
		assertTrue(response.getStatus().isSuccess());
	}
	
	public static void testDeleteRepresentation(){
		Client client = new Client(Protocol.HTTP);
		Reference itemsUri = new Reference("http://localhost:8080/restlet/resources/customers/1");

		Response response = client.delete(itemsUri);
		assertTrue(response.getStatus().isSuccess());
	}
}

 

这里唯一想说的是看测试第一个方法里面的URL的定义:

Reference itemsUri = new Reference("http://localhost:8080/restlet/resources/customers/1");

按照资源的划分,这样的URL是不合适的,正确的URL应该是:

Reference itemsUri = new Reference("http://localhost:8080/restlet/resources/customers");相应的method是PUT。如果不是很理解,看这个系列中的一篇

15
1
分享到:
评论
1 楼 liyf155 2010-03-16  
这篇文章怎么没有TestCase类的代码?

相关推荐

Global site tag (gtag.js) - Google Analytics