0

我正在使用 Spring RestTemplate 调用 Apache Solr 索引。我手动形成一个请求字符串,并且不提供任何有意的 {variable_name} 模板扩展变量。查询的一部分是术语 {!lucene q.op=OR}。不幸的是,URITemplate 引擎会将此作为 restTemplate.getForObject 调用的一部分进行处理。

理想情况下,我想停止此处理。是否可以转义 { } 字符以使 URITemplate 不处理它们?我已经尝试对字符进行编码,但 RestTemplate 假定一个未编码的字符串,因此它们被编码两次并在后端导致 400:错误请求。

示例网址:

http://localhost/solr/select?q= {!lucene q.op=OR}se_genbanklocus:* se_gb_create:* se_gb_update:* se_clone_name:* se_sample_tissue:*&facet=true&facet.limit=3&facet.mincount=1&facet.field= se_sample_tissue&facet.field=se_sample_tissue_name&facet.field=se_sample_tissue_code&facet.field=se_sample_tissue_class&facet.field=se_nuc_acid_type&facet.field=ssam_sample_georegion&start=0&rows=10

4

3 回答 3

1

我找到了一种解决方法,我可以在其中使用模板来扩展一个包含有问题的变量{!lucene q.op=OR}

restTemplate.getForObject(solrServer+"select?{query}" , String.class, requestString );
于 2010-08-05T18:29:09.240 回答
1

这里的问题是你正在使用RestTemplate它不是为它设计的东西。您提供的示例 URL 不是 REST 样式的 URL,它只是大量查询参数,使用在 REST 方案中找不到的编码字符,因此难以进行不需要的替换。

于 2010-08-05T18:42:35.847 回答
1

使用接受 URI 的重载方法怎么样?

于 2012-03-12T12:54:24.627 回答