0

Spring RestTemplate を使用して Apache Solr インデックスを呼び出しています。リクエスト文字列を手動で作成し、意図的な {variable_name} テンプレート展開変数を提供しません。クエリの一部は、用語 {!lucene q.op=OR} です。残念ながら、これは RESTTemplate.getForObject 呼び出しの一部として URITemplate エンジンによって処理されます。

理想的には、この処理を停止したいと思います。URITemplate が処理しないように { } 文字をエスケープする方法はありますか? 文字のエンコードを試みましたが、RestTemplate はエンコードされていない文字列を想定しているため、2 回エンコードされ、バックエンドで 400: Bad Request が発生します。

サンプル URL:

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

ここでの問題は、RestTemplate設計されていないものに使用していることです。あなたが提供したサンプル URL は REST スタイルの URL ではありません。REST スキームでは見つからないエンコードされた文字を使用した大量のクエリ パラメータであるため、不要な置換が困難になります。

于 2010-08-05T18:42:35.847 に答える
1

URI を受け入れるオーバーロードされたメソッドを使用するのはどうですか?

于 2012-03-12T12:54:24.627 に答える
1

テンプレートを使用して、問題のある変数を含む 1 つの変数を展開できる回避策を見つけました。{!lucene q.op=OR}

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