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

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

    博客分类:
  • REST
阅读更多

上篇文章结合了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{
	@Override
	public 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));
	}
	
	@Override
	public 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");
	}
	
	@Override
	public 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,会怎么样:

分享到:
评论
3 楼 andyjackson 2010-05-11  
liuxujim 写道
请问ajax如何评论restlet和jersey?

可以添加多个variants
2 楼 deepthink 2010-04-27  
引用
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)); 
    } 


有一个疑问:为什么要在构造方法里面设置MediaType.TEXT_PLAN 这不就是告诉Resource 只能使用这一种MediaType么,那么我如果在GET只用的是TEXT_HTML,而DELETE我要使用APPLICATION_JSON该怎么设置?
1 楼 liuxujim 2009-07-06  
请问ajax如何评论restlet和jersey?

相关推荐

Global site tag (gtag.js) - Google Analytics