2010-08-05 36 views
0

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

理想情况下,我想停止此处理。有没有逃避{}字符,以便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.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 &开始= 0 &行= 10

回答

1

这里的问题是,你使用RestTemplate的东西是不是专门设计的。您提供的示例网址不是REST样式的网址,它只是一大堆查询参数,使用您在REST方案中无法找到的编码字符,因此存在不必要的替换问题。

+0

同意,我根据您的反馈改变了我的方法 – nialloc 2010-08-06 19:02:34

1

我发现周围的工作中,我可以使用模板来扩大其含有违规一个变量{!lucene q.op=OR}

restTemplate.getForObject(solrServer+"select?{query}" , String.class, requestString); 
1

如何使用接受URI的重载方法?