Остановить расширение URITemplate при использовании Spring RESTTemplate - PullRequest
0 голосов
/ 05 августа 2010

Я использую Spring RestTemplate для вызова индекса Apache Solr.Я формирую строку запроса вручную и не предоставляю никаких преднамеренных переменных раскрытия шаблона {variable_name}.Частью запроса является термин {! Lucene q.op = OR}.К сожалению, это обрабатывается механизмом URITemplate как часть вызова restTemplate.getForObject.

В идеале я хотел бы остановить эту обработку.Можно ли экранировать символы {}, чтобы URITemplate не обрабатывал их?Я пытался кодировать символы, но RestTemplate принимает некодированную строку, поэтому они кодируются дважды и вызывают запрос 400: Bad на серверной части.

Пример 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= 4

Ответы [ 3 ]

1 голос
/ 05 августа 2010

Проблема в том, что вы используете RestTemplate для чего-то, для чего он не предназначен.Пример URL-адреса, который вы дали, не является URL-адресом в стиле REST, это просто масса параметров запроса, использующих закодированные символы, которые вы не найдете в схеме REST, поэтому возникают трудности с нежелательными заменами.

1 голос
/ 12 марта 2012

Как насчет использования перегруженного метода, который принимает URI?

1 голос
/ 05 августа 2010

Я нашел обходной путь, в котором я могу использовать шаблон для раскрытия одной переменной, содержащей ошибочные {!lucene q.op=OR}

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