将Java对象字段转换为URI中的查询参数

Bar*_*ler 3 java rest spring http jackson

我的问题是:如何将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();
Run Code Online (Sandbox Code Playgroud)

以下工作符合预期,但是我想知道是否有更简单的方法来实现它。

Red*_*lab 6

您可以跳过制作MultiValueMap并将参数直接传递给UriBuilder的过程。

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