使用Spring RESTTemplate时停止URITemplate扩展

时间:2010-08-05 17:57:54

标签: spring rest uritemplate

我正在使用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.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

3 个答案:

答案 0 :(得分:1)

我找到了一个解决方法,我可以使用该模板展开一个包含有问题的{!lucene q.op=OR}

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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