【问题标题】:How to encode url string with object in request parameters spring [duplicate]如何在请求参数spring中使用对象对url字符串进行编码[重复]
【发布时间】:2019-09-09 08:36:38
【问题描述】:

我正在尝试将对象作为我的 Spring 应用程序中的请求参数进行请求。

new RestTemplate().getForObject("http://127.0.0.1:8080/items?filter={\"level\":\"BIG\"}", Item.class);

但得到错误:

正如我所发现的,当 UriBuilder 使用 url 解析字符串时会出现问题。 IE。 new URI(...) 给出错误。当我对 Postman 提出相同的请求时,我得到了理想的响应。我如何正确编码网址?我尝试使用 java.net.URLEncoder 但这会给出“IllegalArgumentException: URI is not absolute”错误。

更新:

请求中的过滤器类用于在远程服务器的 mongodb 中进行参数化查询( Query() )。过滤器类:

@Getter
@NoArgsConstructor
public class Filter {

private Map<String, String> criteria;

@JsonAnySetter
public void add(String key, String value) {
    if (criteria == null) {
        criteria = new HashMap<>();
    }

    criteria.put(key, value);
}
}

项目对象类:

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Item {
private String id;
private String name;
private Instant timestamp;
}

【问题讨论】:

  • 能否添加Item对象
  • Item 是一个简单的数据类。请求中的过滤器类用于在远程服务器的 mongodb 中进行参数化查询( Query() )。但我什至不能用 Filter 对象做请求。

标签: java encoding uri resttemplate


【解决方案1】:

我遇到了像你这样的问题,我使用以下 sn-p 代码解决了它

UriComponentsBuilder renewURIBuilder= UriComponentsBuilder.fromHttpUrl("http://127.0.0.1:8080").path("/items").queryParam("filter", "{'level':BIG}");
UriComponents uriComponent=renewURIBuilder.build(true);
URI uri=uriComponent.toUri();

然后像下面这样调用你的 resttemplate

new RestTemplate().getForObject(uri, Item.class);

希望对你有帮助

【讨论】:

  • 我试过了,效果很好
猜你喜欢
  • 2011-09-26
  • 2012-05-11
  • 2014-03-27
  • 2011-10-06
  • 2017-07-02
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多