六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 33|回复: 0

Restlet实战(十一)结合源代码修改Restlet-Spring配置文件

[复制链接]

升级  21.33%

24

主题

24

主题

24

主题

秀才

Rank: 2

积分
82
 楼主| 发表于 2013-1-23 02:46:25 | 显示全部楼层 |阅读模式
上篇文章结合了Restlet的源码分析了Restlet-spring的配置文件,并提出了相关的问题,本篇将对这一问题做一个测试解答。
 
首先修改一下Spring的配置文件:
 
<bean id="restRoute" class="org.restlet.ext.spring.SpringRouter"><property name="attachments"><map><entry key="/customers"><bean class="org.restlet.ext.spring.SpringFinder"><lookup-method name="createResource" bean="customersResource" /></bean></entry><entry key="/customers/{customerId}"><bean class="org.restlet.ext.spring.SpringFinder"><lookup-method name="createResource" bean="customerResource" /></bean></entry><entry key="/users"><bean class="com.mycompany.restlet.application.UserApplication"/></entry></map></property></bean> 
除了配置customer外,还配置了一个跟User相关的Application:
 
public class UserApplication extends Application{@Overridepublic synchronized Restlet createRoot() {Router router = new Router(getContext());router.attach("/{userId}", UserResource.class);router.attach("/{userId}/orders", UserOrdersResource.class);return router;}} 
为了测试更加的清晰,不在Customer相关类上面做修改了,另外建立两个资源文件:UserResource和UserOrdersResource,对应的URL应该分别是:/users/{userId}和/users/{userId}/orders,第一个URL意思是根据id查询得到某个user,而第二个则是查询得到某个user对应的所有的order。
 
public class UserResource extends Resource {String userId;public UserResource(Context context, Request request, Response response) {super(context, request, response);userId = (String) request.getAttributes().get("userId");getVariants().add(new Variant(MediaType.TEXT_PLAIN));}@Overridepublic Representation represent(Variant variant) {String userMsg = "current user id is " + userId;Representation representation = new StringRepresentation(userMsg,MediaType.TEXT_PLAIN);return representation;}} 
public class UserOrdersResource extends Resource {String userId;public UserOrdersResource(Context context, Request request, Response response) {super(context, request, response);getVariants().add(new Variant(MediaType.TEXT_PLAIN));userId = (String) request.getAttributes().get("userId");}@Overridepublic Representation represent(Variant variant) {String userMsg = "get all orders for user whose id is: " + userId;Representation representation = new StringRepresentation(userMsg,MediaType.TEXT_PLAIN);return representation;}} 
需要注意的是,上面两个资源是直接attach到Application,而不是之前文章讲的那样由SpringFinder接管,所以,之前文章强调一些规则,如需要有一个无参的构造函数,一个init方法等,就不适用于上述的两个资源的定义。 
 
没有别的代码,来测试一下吧,打开浏览器,输入http://localhsot:8080/restlet/resources/users/1后,页面会显示:
 
current user id is 1而输入http://localhost:8080/restlet/resources/users/1/orders 后,页面会显示:
 
get all orders for user whose id is: 1 
我们接着测试,如果value是String,会怎么样:
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表