我想使用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