首页 > 解决方案 > RestTemplate 和 UriComponentsBuilder 访问 API

问题描述

我正在尝试访问具有表示为 JSON 的查询参数的 API 的内容,我需要使用 RestTemplate 和 UriComponentsBuilder 发送一个 URL

api:http://remote-api/person?filter={"code":"30ABD999"}&page=0&size=1&sort=name

 public Person getPerson(String filter, Optional<Integer> size, 
                         Optional<Integer> page, Optional<String> sort){

        String endpoint= "http://localhost:8081/person"

        UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(this.endpoint)
                .queryParam("filter",filter);

        page.ifPresent(p -> builder.queryParam("page", p));
        size.ifPresent(s -> builder.queryParam("size", s));
        sort.ifPresent(s -> builder.queryParam("sort", s));

        String url = builder.build().toUriString();

        ResponseEntity<Person> response = 
        this.restTemplate.getForObject(url, null, Person.class);

        return response.getBody();
    }


    

当我提出请求时出现此错误

Raised java.lang.IllegalArgumentException: Not enough variable values available to expand '"code"'

任何帮助将不胜感激。谢谢

标签: javajsonspringspring-bootresttemplate

解决方案


您不能null作为第二个参数传入getForObject.
试试这样:

this.restTemplate.getForObject(url, Person.class);

有关如何在 Spring 中使用 HTTP 客户端的更多详细信息可以在我的德语博客中找到:
https ://agile-coding.blogspot.com/2021/01/reactive-webclient.html


推荐阅读