2010-08-05 26 views
0

J'utilise le printemps RestTemplate pour faire des appels à un index Apache Solr. Je forme une chaîne de requête manuellement et ne fournit aucune variable d'expansion de modèle {variable_name} intentionnelle. Une partie de la requête est le terme {! Lucene q.op = OR}. Malheureusement, ceci est traité par le moteur URITemplate dans le cadre d'un appel à restTemplate.getForObject.extension d'arrêt lors de l'utilisation UriTemplate Spring RESTTemplate

Idéalement je voudrais arrêter ce traitement. Est-ce qu'il n'y a pas d'échappement des caractères {} pour que URITemplate ne les traite pas? J'ai essayé d'encoder les caractères mais RestTemplate suppose une chaîne non-codée ainsi ils sont codés deux fois et provoquent une 400: Mauvaise Demande sur le backend.

URL Exemple:

http://localhost/solr/select?q= {Lucene q.op = OR!} Se_genbanklocus: * se_gb_create: * se_gb_update: * se_clone_name: * se_sample_tissue: * & facette = 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 & rangs = 10

Répondre

1

Le problème ici est que vous utilisez RestTemplate pour quelque chose pour lequel il n'a pas été conçu. L'exemple d'URL que vous avez donné n'est pas une URL de style REST, c'est juste une masse de paramètres de requête, utilisant des caractères codés que vous ne trouverez pas dans un schéma REST, d'où la difficulté avec les substitutions indésirables.

+0

d'accord, je l'ai changé mon approche basée sur vos commentaires – nialloc

1

J'ai trouvé un travail autour dans lequel je peux utiliser le modèle pour développer une variable qui contient l'infraction {!lucene q.op=OR}

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

Comment l'utilisation de la méthode surchargée qui accepte un URI?