标签: restlet

Restlet - 请求 URL 的访问元素

我不确定访问请求的 URL 部分的正确方法是什么。

在这种情况下,我想获取没有查询变量的请求路径。这是我发现的唯一方法:

String path = getRequest().getResourceRef().getHostIdentifier() + 
     getRequest().getResourceRef().getPath();
Run Code Online (Sandbox Code Playgroud)

结果将是此网址的粗体部分:https : //stackoverflow.com/questions/ask ?query=value

我还发现了大约 6 种不同的方法来获取服务器名称(http://stackoverflow.com),但我担心其中一些方法会在我不知道的某些情况下失败(为什么会有 6 种不同的方法来做)一件事):

getRequest().getHostRef().getHostIdentifier();
getRequest().getHostRef().getIdentifier();
getRequest().getRootRef().getHostIdentifier();
getRequest().getRootRef().getIdentifier();
getRequest().getResourceRef().getHostIdentifier();
Run Code Online (Sandbox Code Playgroud)

这似乎获得了带有查询参数的完整 URL:

getRequest().getResourceRef().getIdentifier();
Run Code Online (Sandbox Code Playgroud)

任何进一步的解释将不胜感激。

url restlet request

4
推荐指数
1
解决办法
4383
查看次数

在Java中,如何设置Restlet响应的头?

我似乎无法弄清楚如何将标头添加到我的restlet响应中.当我看到在可用的方法Response的对象,我看到的是setStatus,setEntitysetAttributes但这些都不告诉我如何设置自定义HTTP头的响应.

例如,我有一个GET调用返回类似如下的内容:

HTTP/1.1 200 OK
Content-Type: text/json
Content-Length: 123
Some-Header: the value
Some-Other-Header: another value

{
  id: 111,
  value: "some value this could be anything",
  diagnosis: {
    start: 12552255,
    end: 12552261,
    key: "ABC123E11",
    source: "S1",
  }
}
Run Code Online (Sandbox Code Playgroud)

不管它是什么.在handleGet方法中,我这样处理它:

final MediaType textJsonType = new MediaType("text/json");

@Override
public void handleGet() {
  log.debug("Handling GET...");
  final Response res = this.getResponse();

  try {
    final MyObject doc = this.getObj("hello", 1, "ABC123E11", "S1");
    final String …
Run Code Online (Sandbox Code Playgroud)

java response restlet http-headers

4
推荐指数
1
解决办法
7657
查看次数

Java从restlet资源中访问ServletContext

我在java中使用Tomcat服务器,并希望能够从restlet资源访问ServletContext,以便访问我的缓存DataSource对象(以池化mysql连接).org.restlet.resource.Resource附带一个Context对象,但它与ServletContext没有任何关系.所以经过一些谷歌搜索后,我发现了以下内容:

final String contextKey = "org.restlet.ext.servlet.ServletContext";
final String poolKey = "MyCachedDBPool";
final Map<String, Object> attrs = getContext().getAttributes();
final ServletContext ctx = (ServletContext) attrs.get(contextKey);
if (ctx == null) {
  throw new Exception("Cannot find ServletContext: " + contextKey);
}
final DataSource ds = (DataSource) ctx.getAttribute(poolKey);
if (ds == null) {
  throw new DetourQAException("DataSource not stored in context" 
    + poolKey + "attr");
}
Run Code Online (Sandbox Code Playgroud)

但它为ServletContext返回null.有没有人成功从restlet资源中访问ServletContext,你是怎么做到的?

如果这不是建议的连接池方法,那么在restlet中进行连接池的最佳方法是什么?

java servlets connection-pooling restlet

4
推荐指数
1
解决办法
2446
查看次数

使用HTTP读取文件的第一部分

我想通过阅读文件的第一部分并分析内容来确定文件的类型(通常是UTF-8).(该类型特定于我的社区,但不在我的控制之下,并且不包含在MIME/MediaType中,通常是TEXT_PLAIN).我正在使用客户端上的'org.restlet'库来分析标头

Request request = new Request(Method.HEAD, url);
Run Code Online (Sandbox Code Playgroud)

所以我知道内容长度,并且可以(如果必要和可能)估计我应该为分析下载多少字节

澄清:我无法使用MediaType.从答案1看起来我必须得到内容.因此,修订后的问题是:

"我可以使用Restlet 获取文件的一部分吗?"

答案:以下代码可以满足我的需求.我已经将@BalusC归功于这种方式.如果我错过了任何内容,请评论:

public String readFirstChunk(String urlString, int byteCount) {
    String text = null;
    if (urlString != null) {
        org.restlet.Client restletClient = new org.restlet.Client(Protocol.HTTP);
        Request request = new Request(Method.GET, urlString);
        List<Range> ranges = Collections.singletonList(new Range(0, byteCount));
        request.setRanges(ranges);
        Response response = restletClient.handle(request);
        if (Status.SUCCESS_OK.equals(response.getStatus())) {
            text = processSuccessfulChunkRequest(response);
        } else if (Status.SUCCESS_PARTIAL_CONTENT .equals(response.getStatus())) {
            text = processSuccessfulChunkRequest(response);
        } else {
            System.err.println("FAILED "+response.getStatus());
        }
    }
    return text;
}

private String processSuccessfulChunkRequest(Response …
Run Code Online (Sandbox Code Playgroud)

java http restlet

4
推荐指数
1
解决办法
4204
查看次数

将Camel路由作为Web容器下的REST服务进行曝光

我有Camel路由,我想作为REST Web服务公开.应用程序部署在Web容器(Jetty/Tomcat)上,Spring也用于DI和其他"基础结构"事物.

我看了两个camel-restletcamel-cxfrs组件,虽然它们都提供了作为REST服务公开路由的支持,但是我无法找到如何避免启动单独的服务器.我真正想要的是能够以类似于为Spring-WS入站端点定义路由的方式定义Camel路由,例如

from("restlet://application/user/{id}").to(...)
Run Code Online (Sandbox Code Playgroud)

Web应用程序的配置应该负责接受请求并将它们传输到适当的端点.

不得不承认我很惊讶我无法找到关于这个主题的足够信息,我不认为我的要求非常奇特.

rest spring restlet apache-camel cxfrs

4
推荐指数
1
解决办法
9559
查看次数

如何像浏览器一样实现客户端http缓存?

我使用RESTFul服务作为我的前端的后端.该服务在其响应上设置expires/etag/lastmodified标头.

我正在寻找的是一个客户端(有利的java)库,它可以从服务中获取数据并将其缓存在可插入的缓存后端,如ehcache.

我还希望能够做的是在条目无效时使用后台工作线程自动填充缓存.此外,做条件GET应该是明智的.

我遇到过 http://hc.apache.org/httpcomponents-client-ga/tutorial/html/caching.html

有没有人知道的其他图书馆?这不是一个相当普遍的问题吗?

http restlet http-caching resteasy

4
推荐指数
1
解决办法
4184
查看次数

Google App Engine上的RESTful Web服务

首先,我需要说我在Google App Engine中没那么有经验.

我知道我们可以在GAE上部署RESTful Web服务(JERSEY)

而且我也知道RESTLET有一个专门针对GAE的版本.

我想从那些使用两种方法的人那里获得建议.

例如,为JERSEY配置GAE应用程序太困难或困难??? 或者例如使用RESTLET有什么缺点?还是太厚了(RESTLET)?

谢谢

google-app-engine web-services jersey restlet

4
推荐指数
1
解决办法
2164
查看次数

需要在Restlet Component中放置过滤器的示例

我有一个Restlet(v2.1.1)组件,它使用ServerResource来处理HTTP GET请求.

我想将过滤器和/或路由器放入组件中,以便在请求到达ServerResource之前可以进行一些处理.

我一直在互联网上搜索这样做的例子,以及阅读"Restlet in Action"一书.我发现了一些有趣的东西:

有很多关于如何在组件中设置ServerResource的示例.

有很多关于如何创建和设置过滤器和路由器的示例.

不幸的是,我可能通过书籍和互联网搜索,我找不到使用两者的例子!

根据本书和Internet上的教程,我们应该能够创建一个组件,在组件中设置ServerResource,并使用过滤器来预处理发送到ServerResource的请求.没有任何文档似乎告诉我们如何做到这一点.

我误读了一切吗?是否真的没有办法将过滤器或路由器放在带有ServerResources的组件中?或者我错过了一些提供如何执行此操作的真实示例的文档?

有人可以提供一个简单的例子或提供一个这样做的例子的链接吗?

谢谢...

restlet restlet-2.0

4
推荐指数
1
解决办法
1775
查看次数

使用RESTlet访问Netsuite时无效的登录尝试?

我试图使用RESTlet从Netsuite获取数据.为此,我在PHP中使用以下详细信息:

  1. 消费者密钥
  2. 消费者秘密
  3. 脚本ID
  4. 部署ID
  5. 访问令牌ID
  6. 访问令牌秘密

在第一次使用这些细节时,我得到的错误是无效的登录尝试.我发现它为什么会来,因为以下任何一个或所有错误的细节.

  1. 消费者密钥
  2. 消费者秘密
  3. 访问令牌ID
  4. 访问令牌秘密

在给出正确的细节后,它工作正常,我将所有这些细节存储在DB中.我什么都没改变.但几天后我得到了同样的错误.

我想知道访问令牌是否会在几天后过期,或者为什么错误即将到来.

restlet netsuite

4
推荐指数
4
解决办法
5931
查看次数

RESTlet:如何处理multipart/form-data请求?

当它是多部分/表单数据请求时,如何捕获传入的@Post变量?

对于常规的Post请求,我会这样做:

@Post
public void postExample(Representation entity) throws Exception{
   Form form = new Form(entity);
   System.out.println(form.getFirstValue("something"));
}
Run Code Online (Sandbox Code Playgroud)

但由于它是一个multipart/form-data请求,因此上述输出为null

我是Java新手所以要温柔:)

PS:我对处理传入的文件,只是文本字段不感兴趣.

java multipartform-data restlet

3
推荐指数
1
解决办法
1万
查看次数