2017-01-30 90 views
1

我的問題是:如何將我的Java對象中的所有字段添加到URI作爲查詢參數。將Java對象字段轉換爲URI中的查詢參數

我試圖調用帶有多個查詢參數的HTTP GET請求。所有這些查詢參數都來自一個Java對象。我使用Spring Framework提供的RestTemplate和Jackson提供的ObjectMapper。

@Override 
public List<MyTypes> find(MyFilter myFilter) { 

    // object to Map 
    ObjectMapper objectMapper = new ObjectMapper(); 
    Map<String, String> map = objectMapper.convertValue(myFilter, new TypeReference<Map<String,String>>() {}); 

    // Map to MultiValueMap 
    LinkedMultiValueMap<String, String> linkedMultiValueMap = new LinkedMultiValueMap<>(); 
    map.entrySet().forEach(e -> linkedMultiValueMap.add(e.getKey(), e.getValue())); 

    // call RestTemplate.exchange 
    return getRestTemplate().exchange(
      uriBuilder().path(RestResourcePaths.My_PATH).queryParams(linkedMultiValueMap).build().toUri(), 
      HttpMethod.GET, 
      null, 
      new ParameterizedTypeReference<List<MyTypes>>() {}).getBody(); 

下面的工作如預期,但我不知道是否有一個更簡單的方法來實現它。

回答

2

您可以跳過製作MultiValueMap並將參數直接傳遞給UriBuilder。

uri = uriBuilder().path(RestResourcePaths.My_PATH); 
objectMapper.convertValue(myFilter, new TypeReference<Map<String,String>>() {}) 
.forEach(uri::queryParam)