2016-03-29 21 views
0

Ich muss eine HTTP-Anfrage an einen Authentifizierungsanbieter (Auth0) senden. Ich möchte einen bestimmten Benutzer über seine E-Mail-Adresse erreichen.RestTemplate mit codierten Parametern

Der Antrag muss gehen:

curl -H "Authorization: Bearer ..." https://.../users?q=email%3A%22mymail%40abc.de%22&search_engine=v2 

ich mein Glück versucht, mit RestTemplate (Frühling):

public void doSomething() { 
    ... 

    Map<String, String> requestMap = new HashMap<>(); 
    requestMap.put("q", "email%3A%22mymail%40abc.de%22"); 
    requestMap.put("search_engine", "v2"); 

    RestTemplate restTemplate = getRestTemplateForRequestMap(); 

    HttpHeaders headers = getHeaders(); 
    HttpEntity<Map<String, String>> request = new HttpEntity<>(requestMap, headers); 

    ResponseEntity<UserInfo[]> response = restTemplate.exchange(URI.create(baseApiUrl + "users"), HttpMethod.GET, request, UserInfo[].class); 

    ... 
} 

private RestTemplate getRestTemplateForRequestMap() { 
    RestTemplate restTemplate = new RestTemplate(); 
    List messageConverters = new ArrayList<>(); 
    messageConverters.add(new MappingJackson2HttpMessageConverter()); 
    restTemplate.setMessageConverters(messageConverters); 

    return restTemplate; 
} 

wie der Wert der muss q Parameter Sieht codiert werden (sie nennen es "Lucene Abfragesyntax"). Ich habe verschiedene Varianten ausprobiert. Ich habe sie sogar "codiert" codiert.

Es scheint jedoch, dass der q Parameter nicht funktioniert, da das Ergebnis nicht nur den Benutzer mit der angegebenen E-Mail-Adresse, sondern alle Benutzer enthält. Header sind in Ordnung (sonst würde ich überhaupt keinen Benutzer bekommen).

Antwort

0

Sie können die Karte Ihrer Anfrage Parameter auf einer überladenen Methode restTemplate.exchange hinzufügen:

ResponseEntity<UserInfo[]> response = restTemplate.exchange(URI.create(baseApiUrl + "users"), HttpMethod.GET, 
request, UserInfo[].class,requestMap); 
+0

Sie vermissen etwas? Methode kann nicht aufgelöst werden. Sieht so aus, als könnte ich das mit diesen Parametern nicht machen. – mosquito87

+0

Nein, ich benutze 'org.springframework.http.HttpEntity',' org.springframework.web.client.RestTemplate; 'und ich kann die Methode –

+0

Working beim Konvertieren der URI toString. Allerdings bekomme ich das gleiche Ergebnis (alle Benutzer statt der angegebenen). – mosquito87