0

我是 API 设计的新手,我正在做一个项目,我需要从波兰国家银行 http://api.nbp.pl调用货币兑换 API,但我没有看到任何可以找到 API ID 的迹象。如果我尝试在没有 API ID 的情况下运行应用程序,则会在 Spring Boot 上进行此开发,它会引发 404 错误。

这是我写的一段代码。

@RequestMapping(method = RequestMethod.GET, value = "/exchangerates/rates/{table}/{code}")
public @ResponseBody Object getAllCurriencyExchangeRates(@PathVariable String table, @PathVariable String code) {

    RestTemplate restTemplate = new RestTemplate();
    HttpHeaders headers = new HttpHeaders();

    ResponseEntity<Object> response = 
            restTemplate.getForEntity("http://api.nbp.pl/api/" +table+ "," +code+ Object.class, null, headers);

    return response;
}        

实际查询http://api.nbp.pl/api/exchangerates/rates/a/chf/

所以,我的问题是我们可以调用没有 API ID 的外部 API 吗?

4

3 回答 3

3

首先,您试图访问错误的 API。这就是为什么您找不到 404 的原因。404 表示没有像你打电话的网址。

仔细检查你的restTemplate,

restTemplate.getForEntity("http://api.nbp.pl/api/" + table+ "," +code+ Object.class, null, headers);

连接字符串时你做错了。它应该看起来像这样;

restTemplate.getForEntity("http://api.nbp.pl/api/exchangerates/rates/"+table+"/"+code, Object.class, null, headers);

给 API 开发者一个提示,首先你应该使用 Postman 玩 api,然后用 api 编写代码。

于 2019-12-08T12:21:11.430 回答
0

试试这个——我已经测试过了——它有效。请记住,这只是一个测试实现。方法内部的东西main必须复制到你的getAllCurriencyExchangeRates方法中。并且肯定替换"a""chf"通过变量。我假设table并且code是您要使用的变量。我使用String是因为我不知道您要返回哪种类型的对象。您肯定可以使用自己的 pojo 而不是String.

package scripts;

import java.net.URI;

import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestOperations;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;

/**
 * author: flohall
 * date: 08.12.19
 */
public class Test {

    public static void main(final String[] args){
        final String url = "http://api.nbp.pl/api/exchangerates/rates";
        final URI uri = UriComponentsBuilder.fromHttpUrl(url).path("/").path("a").path("/").path("chf").build().toUri();
        System.out.println(uri);

        final RestOperations restTemplate = new RestTemplate();
        final ResponseEntity<String> result = restTemplate.getForEntity(uri, String.class);

        System.out.println(result.getBody());
    }

}
于 2019-12-08T11:13:15.663 回答
0

试试这个

ResponseEntity<Object> response =
            restTemplate.getForEntity("http://api.nbp.pl/api/exchangerates/rates/" + table + "/" + code, Object.class, headers);
于 2019-12-08T11:16:53.457 回答