2010-08-05 4 views
0

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

В идеале я хотел бы остановить эту обработку. Не удается ли избежать символа {}, чтобы 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.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 для чего-то, для чего он не предназначен. Образец URL-адреса, который вы указали, не является URL-адресом REST-стиля, это просто масса параметров запроса, используя закодированные символы, которые вы не найдете в схеме REST, и, следовательно, трудности с нежелательными заменами.

+0

согласен, я изменил свой подход на основе вашей обратной связи – nialloc

1

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

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

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

Смежные вопросы