2017-01-30 91 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)