我正在使用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
答案 0 :(得分:1)
我找到了一个解决方法,我可以使用该模板展开一个包含有问题的{!lucene q.op=OR}
restTemplate.getForObject(solrServer+"select?{query}" , String.class, requestString );
答案 1 :(得分:1)
这里的问题是你正在使用RestTemplate
来设计它不适合的东西。您提供的示例URL不是REST样式的URL,它只是大量的查询参数,使用您在REST方案中找不到的编码字符,因此难以进行不必要的替换。
答案 2 :(得分:1)
如何使用接受URI的重载方法?