有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在请求参数spring中使用对象编码url字符串

我试图在Spring应用程序中将对象作为请求参数执行请求

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

但是得到错误:

enter image description here

正如我所发现的,当UriBuilder解析带有url的字符串时,就会出现问题。即新的URI(…)给出了错误。当我向邮递员提出同样的要求时,我得到了令人满意的答复。如何正确编码url?我试着用java。网但这会产生“IllegalArgumentException:URI不是绝对的”错误

更新:

请求中的Filter类用于在远程服务器的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;
}

共 (1) 个答案

  1. # 1 楼答案

    我有像你这样的问题,我用下面的代码片段来解决它

    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);
    

    希望对你有帮助