之前的系列文章,为了测试一些功能点,所以只选择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。如果不是很理解,看这个系列中的一篇