2017-01-30 7 views
1

Моя проблема: как я могу добавить все поля из моего объекта Java в URI в качестве параметров запроса.Преобразование полей объекта Java в параметры запроса в URI

Я пытаюсь вызвать HTTP-запрос GET с несколькими параметрами запроса. Все эти параметры запроса исходят от одного объекта Java. Я использую RestTemplate, предоставленный Spring Framework и 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)