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

Restlet实战(二十四)获取参数值(续)

    博客分类:
  • REST
阅读更多

这个系列之前已经有一篇文章写如何获取参数值,看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'); 

 

分享到:
评论

相关推荐

    Restlet实战(二十六)事务 (Transaction)

    本文将深入探讨RESTful服务中的事务处理,并以《Restlet实战(二十六)事务 (Transaction)》为例进行解析。 首先,我们要理解RESTful服务中的核心原则之一是无状态(Stateless)。这意味着每个客户端请求都包含处理...

    Java Restlet获取请求头实例

    Restlet 实现ServerResource类 列子有: 返回简单JSON类型 获取请求头,返回请求头 接收简单Json类型数据 将复杂对象使用Json格式返回

    restlet

    RESTlet是一款开源框架,专为构建基于REST(Representational State Transfer)原则的Web服务和应用程序设计。REST是一种轻量级的架构风格,广泛应用于互联网应用的开发,它强调通过简单的HTTP方法(如GET、POST、...

    RestletClient接口调试

    RestletClient是一款强大的接口调试工具,它为开发者提供了一个便捷的平台来测试、调试和分析RESTful Web服务。在Web应用程序开发过程中,接口调试是非常重要的一环,它可以帮助开发者验证API的功能,确保数据的正确...

    org.restlet.jar

    org.restlet.jar

    Restlet Client 插件安装包

    1. **获取插件**: 你已经拥有了名为"Restlet Client - REST API Testing.crx"的安装包,这是`.crx`格式的Chrome扩展程序文件。 2. **安装方法**: 将该文件直接拖拽到打开的Google Chrome浏览器窗口中,浏览器会自动...

    restlet2.1学习笔记项目代码

    Restlet是一个开源框架,专为构建RESTful(Representational State Transfer)Web服务而设计。REST是一种轻量级的架构风格,常用于构建可扩展、高性能的互联网应用程序。本项目是针对Restlet 2.1版本的学习笔记,...

    Restlet与Spring 集成

    这个方法接收请求参数,并通过`getResponse().setStatus()`设置状态码,通过`getResponse().setEntity()`设置返回的JSON值。 3. **配置Restlet与Spring**: - **restletContext.xml**:这是Restlet的配置文件,...

    restlet项目

    Restlet项目是一个开源框架,专门用于构建RESTful(Representational State Transfer)Web服务。REST是一种软件架构风格,它强调简洁、可扩展性和无状态性,是Web服务设计的主流方式。Restlet框架提供了全面的工具集...

    RESTLET开发

    ### RESTLET开发实例详解 #### 一、RESTLET框架简介 **RESTLET**是一个轻量级且全面的框架,旨在实现REST(Representational State Transfer)原则与Java类之间的映射。该框架支持广泛的REST式系统构建,不仅仅...

    Restlet开发的Basic认证

    Restlet是一个轻量级的Java Web服务开发框架,它提供了构建RESTful(Representational State Transfer)应用程序的工具和API。REST是一种架构风格,强调简洁、无状态和可缓存的网络交互,常用于构建高性能、高可用性...

    Restlet开发实例

    接下来,我们进入"RESTLET开发实例(二)使用Component、Application的REST服务.doc"。在Restlet框架中,Component是整个应用的基础,它负责管理和协调多个Application。Application则是实际处理HTTP请求的实体,它...

    Restlet所需要的所有jar包

    Restlet是一款开源的Java框架,专门用于构建RESTful(Representational State Transfer)Web服务。REST是一种轻量级的架构风格,常用于构建高效、可扩展的网络应用程序。本压缩包包含Restlet框架运行所需的全部jar...

    RESTLET框架学习书籍

    #### 二、RESTLET框架的基础架构 - **RESTLET的基本概念**: - **Resources**:表示RESTLET中的资源,是RESTLET应用的核心组件,用于处理特定URL的HTTP请求。 - **Filters**:过滤器用于拦截请求和响应,实现如...

    Restlet in action 英文 完整版

    第二章“Beginning a Restlet application”中,作者通过一个实际的例子引导读者逐步创建一个简单的Restlet应用。这包括设置开发环境、定义资源、处理HTTP方法(如GET、POST等)以及配置服务器。这一章节对于初学者...

    restlet实现最简单的restful webservice

    Restlet是一款开源框架,专为构建RESTful Web服务和客户端应用程序设计。REST(Representational State Transfer)是一种轻量级的架构风格,广泛用于构建互联网应用,因为它提供了高效、分布式的系统设计原则。本文...

    org.restlet-2.3.0.jar 最新版本

    《深入理解org.restlet-2.3.0.jar:Java RESTful开发的得力助手》 在Java开发领域,REST(Representational State Transfer)架构风格已经成为构建Web服务的主流选择,而org.restlet-2.3.0.jar则是实现RESTful API...

    restlet1.1文档

    #### 二、Restlet的特点与应用场景 1. **统一的开发环境**:Restlet提供了一个统一的环境来处理不同的HTTP请求方法,使得开发者能够更专注于业务逻辑而不是底层协议。 2. **改进的部署灵活性**:Restlet允许开发者...

Global site tag (gtag.js) - Google Analytics