2010-08-05 90 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的重載方法?