2017-01-30 12 views
1

私の問題は、JavaオブジェクトのすべてのフィールドをクエリパラメータとしてURIに追加する方法です。JavaオブジェクトフィールドをURIのクエリパラメータに変換する

複数のクエリパラメータを使用してHTTP GETリクエストを呼び出そうとしています。これらのクエリパラメータはすべて1つの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) 
関連する問題