创建 rest url 以在 Java 和 Spring Boot 中调用外部 api 的最佳方法

Best approach to create rest url to call external api in Java and SpringBoot

我在一个 SpringBoot 项目中工作,我正在开发一个 rest 端点,它将接收一些参数,我将根据这些参数创建一个 uri,我将调用另一个外部端点来检索图像。

现在我有一个具有以下端点的休息控制器:

 @GetMapping(value = "/{param1}/{param2}/{param3}/{param4}", produces = MediaType.IMAGE_JPEG_VALUE)
    public byte[] getImageryBaseMap(@PathVariable("param1") Long param1, @PathVariable("param2") Long param2,
                                    @PathVariable("param3") Long param3, @PathVariable("param4") Long param4)
    throws IOException{
        //calls my service
        return myService.getMyMethod(param1, param2, param3, param4);
    }

在 myService class 上,我调用了一个外部端点。

 public byte[] retrieveImageryBaseMap(Long param1,  Long param2, Long param3, Long param4){
        String url = "https://host-name:6443/external/Image/export?bbox="+ param1 +"%" + param2+ "+%"+ param3 + "%" + param4 +"&format=png&f=image";

       // here I call the external api endpoint to retrieve an image
        byte[] image = getImage(url);
        return image;
    }

我的问题是:

1) 管理创建上述 url 的最佳 approach/practices 是什么?我基本上硬编码了几乎所有上面的 url 只是用来自方法 retrieveImageryBaseMap 的参数替换值。想知道是否有更好的方法或者是否可以。

2) 我还在 url String url = "https://host-name:6443/external/Image/export?bbox="+ param1 +"%" + param2+ "+%"+ param3 + "%" + param4 +"&format=png&f=image"; 中硬编码了主机名和端口现在我只是使用开发主机名测试它,但在生产中主机名和端口会有所不同。所以还想请问最好approach/practice在url中管理主机名?我应该像这样硬编码还是使用不同的方法?

伙计们非常感谢任何帮助,我自己工作,不幸的是没有导师来问这些问题,所以被困在这里。

干杯!

您可以将 UriComponentBuilder 用于此类目的,它非常灵活

这是一个例子:

String URI = UriComponentsBuilder.newInstance()
      .scheme("https").host("host-name").port(6443).pathSegment("external”,”Image”,”export”)
      .queryParam(“paramName1”, value1)
      .queryParam(“paramName2”,value2)
      .build(). toUriString();

这里是 url 文档 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/util/UriComponentsBuilder.html