这个系列之前已经有一篇文章写如何获取参数值,看Restlet实战(十二)获取参数值 ,在那篇文章中,提到了三种类型获取值。
1. 从Web Form中获取值
2. 从查询中获取值
3. 从Cookie中获取值
而本篇文章我翻译网上的一篇文章也是涉及到获取和设置参数值,算是一个补充,原文见这里
Restlet新手常见问题解答
我已经用Restlet几年了,因此我有这个机会去引导一些人去用它。当人们开始用的时候,总有一些问题。我把问题以及答案提出来,我想会有帮助的。
注意:答案是基于Restlet1.1
问题:我怎么存取URL查询参数?
有两个答案:
A1,明确的查询参数
最容易的方法是在Application里为这些参数指定一个名字,并告诉Routers这些参数。
典型的,你在Application里创建一个Router,然后通过attach(String uriPattern, Class<? extends Resource> targetClass)增加这个Router到Application。调用这个方法,返回一个新创建的Route。
为了让Router为每一次请求能从URL中抽取一个参数,调用extractQuery(String attribute, String parameter, boolean first),象:
router.attach("collection", MyCollectionResource.class)
.extractQuery("page", "page", true)
.extractQuery("perPage", "perPage", true);
一旦所有的被设置完,当你写你的Resource,并且想读取那个参数Restlet自动的将这个参数放到Map里,返回通过:
Request.getAttributes()
因此你能访问你的参数,象:
getRequest().getAttributes().get('page');
记住对一个请求来说,如果没有指定参数,get()的结果将是null,另外,如果你在extractQuery的最后一个参数设置为false,结果将是一个List。
A2,任意的查询参数
当然,有时,你需要在运行时读取一个任意查询参数,或者检查一个查询参数是否被指定。这在一个Resource里面很容易做到。通过getQuery(),象:
String fooParam = getQuery().getFirstValue('foo');
刚开始,getQuery返回一个“Form”,看起来很奇怪。但是对于这个案例来说,form被证明是很合适的而且有用的类。例如,它有一个一个很有用的方法getValuesMap(),作用是得到一个包含所有值的Map。
问题:我如何读取Request Headers
A1,标准HTTP headers
Restlet有意成为一个全面的Java API去构建和呼叫Restful Application,而不需要Restful Web application。因此restlet提供了一些在语义上能够描绘使用的restful的范例。
因此,想访问大多数HTTP headers你能够呼叫Request类的适当的方法。
一个快速引用:
HTTP Header |
Method of Request |
Referer |
getReferrerRef |
Cookie |
getCookies() |
If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match |
getConditions |
Authorization |
getChallengeResponse |
(这个表格没有列出所有的,仅仅作为一个例子来举例说明Restlet是如何工作的)
A2,自定义HTTP headers
当然,客户端可以发送任何header作为自定义的header,你也许需要检查什么header从客户端发送过来,以及得到对应的值。Restlet将所有的request headers放到一个Form里,这个Form可以通过在request的attributes里一个指定的关键字来访问。
例如:
Form requestHeaders = (Form) getRequest().getAttributes().get('org.restlet.http.headers');
String myAwesomenessHeader = requestHeaders.getFirstValue('X-Awesomeness');
问题:我如何设定Reponse headers
Response headers工作方式与Request headers的类似。对于标准headers,有类方法支持,对于自定义的headers,则在Reponse attributes里面指定一个关键字来实现。
A1,标准HTTP headers
HTTP Header |
Method of Response |
Location |
setLocationRef() |
Server |
setServerInfo() |
WWW-Authenticate |
setChallengeRequest() |
一些可以从Reponse表示中获得的headers
HTTP Header |
Method of Representation |
Last-Modified |
setModificationDate() |
Etag |
setTag() |
Content-Size |
setSize() |
Expires |
setExpirationDate() |
A2,自定义HTTP headers
Form responseHeaders = (Form) getResponse().getAttributes().get('org.restlet.http.headers');
if (responseHeaders == null)
{
responseHeaders = new Form();
getResponse().getAttributes().put('org.restlet.http.headers', responseHeaders);
}
responseHeaders.add('X-Awesomeness', 'true');
分享到:
相关推荐
NULL 博文链接:https://ajaxcn.iteye.com/blog/438237
Restlet 实现ServerResource类 列子有: 返回简单JSON类型 获取请求头,返回请求头 接收简单Json类型数据 将复杂对象使用Json格式返回
RESTLET开发实例(二)使用Component、Application的REST服务
restlet相关文档
restlet项目
org.restlet.jar
Restlet与Spring 集成
Restlet Client插件是一款运行在chrome内核浏览器上的Web服务测试插件,该插件主要用于测试各种Web服务,能查看网站基本信息、浏览网页代码并能发送HTTP请求来测试网站Web服务,同时支持自动化API场景。用户在安装了...
一个简单的Restlet开发框架的Basic认证的例子
restlet2.1学习笔记项目代码
RestletClient接口调试,非常好用的接口调试工具。对开发人员非常有帮助的工具。
Restlet所需要的所有jar包 一次下载,以后高枕无忧!
restlet入门helloworld示例
本文是对Restlet官方教程http://restlet.com/learn/tutorial/2.2/的中文翻译。
RESTLET框架学习书籍
Restlet2.0用户指南
资源里面包含了Restlet从入门到高级的开发过程,对学习Restlet有很大的帮助
restlet工程示例,restlet工程小例子
RESTLET开发实例(一)基于JAX-RS的REST服务