`
ajax
  • 浏览: 253482 次
  • 性别: 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类的代码?

相关推荐

    restlet处理各种请求方式参考示例

    本示例将详细阐述如何使用Restlet框架处理HTTP协议中的各种请求方法,如GET、POST、PUT、DELETE等。 首先,让我们了解RESTlet的基本结构。在Restlet中,应用程序由资源(Resource)组成,这些资源是可交互的对象,...

    restlet项目

    3. **定义HTTP方法**: 在Restlet类中覆盖`get()`, `post()`, `put()`, `delete()`等方法,以处理不同类型的HTTP请求。 4. **设置路由**: 指定Restlet将响应哪些URI路径。 5. **运行应用**: 将Restlet附加到一个...

    restlet工程示例

    - 创建`ClientResource`实例,指定目标URI,然后调用其对应HTTP方法的方法,如`get()`, `post()`, `put()`, `delete()`。 5. **数据交换格式** - RESTful服务通常使用JSON或XML作为数据交换格式。Restlet提供了`...

    restlet

    REST是一种轻量级的架构风格,广泛应用于互联网应用的开发,它强调通过简单的HTTP方法(如GET、POST、PUT、DELETE)来操作资源,以实现高效、可扩展的网络通信。 RESTlet框架提供了客户端和服务器端的组件,使得...

    restlet实现最简单的restful webservice

    3. **定义路由**:在Restlet应用中,你需要创建一个路由(Route)来映射URL到对应的资源。这可以通过创建一个Application类来完成。 ```java import org.restlet.Application; import org.restlet.Restlet; ...

    基于Spring的Restlet实例

    1. **RESTful服务基础**:REST是一种软件架构风格,强调通过HTTP协议暴露资源,使用HTTP方法(GET、POST、PUT、DELETE等)来操作这些资源。理解REST的基本原则和设计模式对于创建高效的API至关重要。 2. **Spring...

    Restlet开发实例

    在这个实例中,你将学习如何使用Restlet框架结合JAX-RS来定义资源、处理HTTP方法(如GET、POST、PUT、DELETE等)以及如何处理JSON或XML数据。Restlet提供了JAX-RS兼容的组件,使得开发者可以轻松地在Restlet环境中...

    restlet入门示例

    REST架构基于HTTP协议,通过HTTP方法(GET、POST、PUT、DELETE等)来操作资源。资源通常由URI(Uniform Resource Identifier)唯一标识。在RESTful API中,每个URI对应一个资源,而HTTP方法定义了对这些资源的操作。...

    RestletClient接口调试

    REST是一种网络应用程序的设计风格和开发方式,基于HTTP协议,以资源为中心,通过统一资源标识符(URI)来定位资源,使用标准方法(GET、POST、PUT、DELETE等)进行操作。RESTful接口遵循这些原则,使得它们易于理解...

    Restlet Client 插件安装包

    1. **请求构造**: `Restlet Client`允许用户手动输入或选择HTTP方法(GET、POST、PUT、DELETE等),设置URL,添加查询参数,以及定义HTTP头信息。对于POST、PUT等需要提交数据的方法,它支持多种数据格式,如JSON、...

    谷歌Restlet Client插件

    它支持多种HTTP方法,如GET、POST、PUT、DELETE等,允许用户发送自定义请求头和POST数据,极大地简化了Web服务的交互过程。 在使用谷歌Restlet Client插件时,首先需要在你的谷歌浏览器上安装该插件。你可以通过...

    restlet restful

    RESTful是一种软件架构风格,设计模式,是基于HTTP协议的Web服务设计原则,强调资源的概念,通过URI来定位资源,通过HTTP方法(GET、POST、PUT、DELETE等)来操作资源。它简化了Web服务的开发,使得服务器端和客户端...

    Restlet Client

    1. **请求方法选择**:Restlet Client支持所有常见的HTTP方法,如GET、POST、PUT、DELETE、PATCH、OPTIONS等,用户可以根据需求选择相应的方法发送请求。 2. **URL构造**:在发送请求时,可以方便地输入或粘贴URL,...

    restlet-jse-2.2.1.zip

    - 处理HTTP方法:Restlet支持GET、POST、PUT、DELETE等HTTP方法,通过重写`handle`或`service`方法来定义不同方法的行为。 - 构建URI路由:使用`Router`组件,可以方便地根据请求的URI匹配不同的资源或处理逻辑。 ...

    Restlet 2.0 边学边写(八)使用jQuery和ajax实现对Restlet资源的CRUD操作

    例如,`@Post`、`@Get`、`@Put`和`@Delete`注解分别对应上述的四种操作。 至于"firstSteps"这个文件名,可能是该教程中的一个起点项目或者示例代码,它可能包含了一个简单的Restlet应用和使用jQuery进行CRUD操作的...

    org.restlet-2.3.0.jar 最新版本

    REST是一种基于HTTP协议的轻量级设计模式,强调资源的概念,通过URI(Uniform Resource Identifier)来标识资源,并通过HTTP方法(如GET、POST、PUT、DELETE等)进行操作。RESTful API的设计使得服务接口简洁且易于...

    Restlet in Action

    - 如何选择合适的HTTP方法(GET、POST、PUT、DELETE等)来设计Web服务接口。 - 实例演示:通过一个简单的示例展示如何使用Restlet框架快速搭建RESTful服务。 2. **第2章:启动Restlet应用程序**(Beginning a ...

    52-restlet.rar_restlet

    3. **路由与处理**:讲解如何使用Restlet来定义路由规则,将不同的HTTP请求映射到相应的处理函数,以及如何处理HTTP方法(GET、POST、PUT、DELETE等)。 4. **数据交换格式**:讨论Restlet支持的数据交换格式,如...

Global site tag (gtag.js) - Google Analytics