2016-03-29 64 views
0

我需要向身份驗證提供程序(Auth0)發送HTTP請求。我想通過其電子郵件地址獲取一個特定用戶。帶編碼參數的RestTemplate

請求必須去:

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

我想我的運氣RestTemplate(春季):需要

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; 
} 

貌似q參數的值進行編碼(他們稱之爲它「Lucene查詢語法」)。我嘗試了不同的變化。我甚至把它們編碼爲「硬編碼」。

但是,好像q參數不起作用,因爲結果不僅包括具有指定電子郵件地址的用戶,而且包括所有用戶。 標題是好的(否則我會得到任何用戶)。

回答

0

你可以上的restTemplate.exchange一個重載的方法添加請求參數的地圖:

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

你失去了一些東西?方法無法解決。看起來我不能用這個參數來做。 – mosquito87

+0

不,我正在使用'org.springframework.http.HttpEntity','org.springframework.web.client.RestTemplate;'並且我可以解析方法 –

+0

將URI轉換爲toString時的工作方式。但是,我得到相同的結果(所有用戶,而不是指定的)。 – mosquito87