`

Restlet实战(四)与Spring集成

    博客分类:
  • REST
 
阅读更多

在上一篇文章中介绍了如何在restlet.xml中设置Component,本篇将介绍restlet如何和Spring结合。

 

首先将相应的jar文件放到WEB-INF/lib下,针对上一篇的示例代码,我们做一些修改,当然也包括一些配置。

 

首先

 

在web.xml注释掉如下代码:

 

Xml代码  收藏代码
  1. <servlet>    
  2.    <servlet-name>RestletServlet</servlet-name>    
  3.    <servlet-class>    
  4.       com.noelios.restlet.ext.servlet.ServerServlet     
  5.    </servlet-class>    
  6. </servlet>    
  7.   
  8.     
  9. <servlet-mapping>    
  10.    <servlet-name>RestletServlet</servlet-name>    
  11.    <url-pattern>/*</url-pattern>    
  12. </servlet-mapping>  

 

 因为有专门的SpringServlet来处理请求,所以,加入如下代码:

Xml代码  收藏代码
  1.  <context-param>  
  2. <param-name>contextConfigLocation</param-name>  
  3. <param-value>classpath*:applicationContext*.xml</param-value>  
  4.  </context-param>  
  5.    
  6.  <listener>  
  7. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  8.  </listener>  
  9.    
  10.  <servlet>  
  11. <servlet-name>restlet</servlet-name>  
  12. <servlet-class>com.noelios.restlet.ext.spring.SpringServerServlet</servlet-class>  
  13. <init-param>  
  14.     <param-name>org.restlet.component</param-name>  
  15.     <param-value>component</param-value>  
  16. </init-param>  
  17. </servlet>  
  18.    
  19.  <servlet-mapping>  
  20. <servlet-name>restlet</servlet-name>  
  21. <url-pattern>/resources/*</url-pattern>  
  22.  </servlet-mapping>  

 

接下来对CustomerResource做一修改,值得注意的是与Spring集成,Resource类里面有一些规则,首先必须有一个无参的构造参数,一个init方法,这个方法包含那些原来定义在非默认构造函数的代码。

 

Java代码  收藏代码
  1. public class CustomerResource extends Resource {  
  2.     String customerId = "";  
  3.     private CustomerDAO customerDAO;  
  4.       
  5.     @Override  
  6.     public void init(Context context, Request request, Response response) {  
  7.         super.init(context, request, response);  
  8.         customerId = (String) request.getAttributes().get("custId");  
  9.     }  
  10.       
  11.     public CustomerResource(){  
  12.         getVariants().add(new Variant(MediaType.TEXT_PLAIN));   
  13.     }  
  14.       
  15.     public CustomerResource(Context context, Request request, Response response) {  
  16.         super(context, request, response);  
  17.           
  18.         getVariants().add(new Variant(MediaType.TEXT_PLAIN));  
  19.     }  
  20.   
  21.     @Override  
  22.     public Representation getRepresentation(Variant variant) {  
  23.         String userMsg = customerDAO.getCustomerById(customerId);  
  24.         Representation representation = new StringRepresentation(userMsg,  
  25.                 MediaType.TEXT_PLAIN);  
  26.         return representation;  
  27.     }  
  28.   
  29.     public void setCustomerDAO(CustomerDAO customerDAO) {  
  30.         this.customerDAO = customerDAO;  
  31.     }     
  32. }  

 需要说明的是按照现在三层架构流行分法,我们姑且认为Resource就是我们常说的Service层,那么在resource里面我们需要调用数据层的类来完成对数据的处理。上面代码中,我创建了一个CustomerDAO作为数据处理层,相关类代码如下:

Java代码  收藏代码
  1. public interface CustomerDAO {  
  2.     public String getCustomerById(String id);  
  3. }  

 

Java代码  收藏代码
  1. public class CustomerDAOImpl implements CustomerDAO{  
  2.     public String getCustomerById(String id){  
  3.         //get other information through id such as name, no, address etc.  
  4.         String name = "ajax";  
  5.         String address=  "Shanghai";  
  6.         return "The customer name is " + name + " and he is from " + address;  
  7.     }  
  8. }  

 

Spring配置文件applicationContext-***.xml:

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <beans  default-autowire="byName" xmlns="http://www.springframework.org/schema/beans"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
  6.       
  7.     <bean id="component" class="org.restlet.ext.spring.SpringComponent">  
  8.         <property name="defaultTarget" ref="restRoute" />  
  9.     </bean>  
  10.     <bean id="restRoute" class="org.restlet.ext.spring.SpringRouter">  
  11.         <property name="attachments">  
  12.             <map>  
  13.                 <entry key="/customers/{custId}">  
  14.                     <bean class="org.restlet.ext.spring.SpringFinder">  
  15.                         <lookup-method name="createResource" bean="customerResource" />  
  16.                     </bean>  
  17.                 </entry>  
  18.             </map>  
  19.         </property>  
  20.     </bean>  
  21.       
  22.     <bean id="customerResource" class="com.mycompany.restlet.resource.CustomerResource" scope="prototype">  
  23.         <property name="customerDAO" ref="customerDAO" />  
  24.     </bean>  
  25.   
  26.     <bean id="customerDAO" class="com.mycompany.restlet.dao.CustomerDAOImpl"/>  
  27. </beans>  

 

ok,所有配置以及代码完成,下面做一个简单的测试,打开浏览器输入:http://localhost:8080/restlet/resources/customers/1

 

页面结果是:

The customer name is ajax and he is from Shanghai

 

 

看上面的Spring配置,如果有多个URL,例如

/customers/{custId},

/customers/{custId}/orders,

/customers/{custId}/orders/{orderId}

 

那么/customers需要重复三次,有什么办法简化吗?看下面改造后的配置:

Java代码  收藏代码
  1. <bean id="restRoute" class="org.restlet.ext.spring.SpringRouter">  
  2.     <property name="attachments">  
  3.         <map>  
  4.             <entry key="/customers" value-ref="customerRoute" />  
  5.         </map>  
  6.     </property>  
  7. </bean>  
  8.   
  9. <bean id="customerRoute" class="org.restlet.ext.spring.SpringRouter">  
  10.     <property name="attachments">  
  11.         <map>  
  12.             <entry key="/{customerId}">  
  13.                 <bean class="org.restlet.ext.spring.SpringFinder">  
  14.                     <lookup-method name="createResource" bean="customerResource" />  
  15.                 </bean>  
  16.             </entry>  
  17.         </map>  
  18.     </property>  
  19. </bean>  

 

这样,可以动态配置基于/customers/*的URL了,如果你仍旧不明白,看一下官方的restlet与Spring结合的例子。

分享到:
评论

相关推荐

    52-restlet.rar_restlet

    8. **扩展与集成**:可能包含如何将Restlet与其他技术(如Spring框架、JAX-RS规范、Servlet容器等)集成,以实现更复杂的Web服务。 9. **实战示例**:提供具体的代码示例,演示如何创建一个完整的REST服务,包括...

    使用注解配置Spring多数据源

    Restlet是一个轻量级的Java RESTful Web服务库,可以与Spring集成。在处理HTTP请求时,根据请求参数或业务逻辑,选择合适的数据源进行操作。MySQL是常用的开源关系型数据库,与Spring的JdbcTemplate或MyBatis等ORM...

    In Action系列技术书籍

    第三版内容可能涵盖了Spring 3.x,讲解了如何使用最新版本的Spring进行开发,包括Spring MVC、Spring JDBC、事务管理、集成测试等方面。 "Restlet in Action"是一本关于RESTful架构风格的开发书籍。REST...

    RESTful Java Web Services (2009).pdf

    #### 四、实战案例分析 - **资源模型**:定义资源表示形式,如XML或JSON格式的数据结构。 - **HTTP方法的应用**:GET用于获取资源,POST用于创建资源,PUT用于更新资源,DELETE用于删除资源。 - **状态码管理**:...

Global site tag (gtag.js) - Google Analytics