【问题标题】:Convert Java object fields to query parameters in URI将 Java 对象字段转换为 URI 中的查询参数
【发布时间】:2017-06-15 14:30:39
【问题描述】:

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

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

【问题讨论】:

    标签: java spring rest http jackson


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我为此编写了一个 jackson 模块 - 将类型化对象直接转换为 HTTP 查询字符串。

      https://github.com/trickl/jackson-module-http-query

      它可能很有用,尽管我怀疑对象 - 地图 - 查询参数技巧足以满足大多数人的需求。

      【讨论】:

        猜你喜欢
        • 2017-02-24
        • 1970-01-01
        • 2012-12-28
        • 2010-10-09
        • 1970-01-01
        • 2017-08-29
        • 2012-10-28
        • 2011-02-11
        • 1970-01-01
        相关资源
        最近更新 更多