如何在Grails控制器中获取原始二进制内容

时间:2013-05-13 20:19:09

标签: grails solr proxy

经过多天的搜索和许多不成功的尝试,我希望社区知道实现我的任务的方法:

我想使用grails作为我的solr后端的代理。通过这个,我想确保只有授权的请求由solr处理。 Grails检查提供的集合和请求的操作,并使用预定义的基于用户的规则验证请求。因此,我将grails URL映射扩展为

"/documents/$collection/$query" {
    controller = "documents"
    action = action = [GET: "proxy_get", POST: "proxy_post"]
}

即使客户端使用solrJ,proxy_get方法也能正常工作。我所要做的就是将URL请求转发给solr并回复solr响应。

但是,在proxy_post方法中,我需要获取请求的原始主体数据以将其转发到solr。 SolrJ正在使用javabin,到目前为止我无法获得原始二进制请求。最有希望的方法是:

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(solrUrl);
InputStream requestStream = request.getInputStream();
ContentType contentType = ContentType.create(request.getContentType());
httpPost.setEntity(new ByteArrayEntity(IOUtils.toByteArray(requestStream), contentType));
httpPost.setHeader("Content-Type", request.getContentType())
HttpResponse solrResponse = httpClient.execute(httpPost);

但是,在javabin的情况下,传输的内容为空(例如,当我使用solrJ添加文档时)。

所以我的问题是,是否有可能获得原始二进制文章内容,以便我可以将请求转发给solr。

的Mathias

1 个答案:

答案 0 :(得分:0)

尝试使用Groovy HttpBuilder。它具有强大的低级API,同时提供groovyness