[英]Convert Java object fields to query parameters in 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();
以下按预期工作,但是我想知道是否有更简单的方法来实现它。
您可以跳过创建MultiValueMap并将params直接传递给UriBuilder。
uri = uriBuilder().path(RestResourcePaths.My_PATH);
objectMapper.convertValue(myFilter, new TypeReference<Map<String,String>>() {})
.forEach(uri::queryParam)
我编写了一个 jackson 模块来执行此操作 - 将类型化对象直接转换为 HTTP 查询字符串。
https://github.com/trickl/jackson-module-http-query
它可能很有用,尽管我怀疑对象 - 地图 - 查询参数技巧足以满足大多数人的需求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.