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



我在一个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类上,我调用一个外部端点。

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的最佳方法/实践是什么?我基本上对上面几乎所有的url都进行了硬编码,只是用方法retrieveImageBaseMap中的参数替换了这些值。我想知道是否有更好的方法,或者是否可以。

2( 我还在urlString url = "https://host-name:6443/external/Image/export?bbox="+ param1 +"%" + param2+ "+%"+ param3 + "%" + param4 +"&format=png&f=image";中对主机名和端口进行了硬编码。现在我只是使用dev主机名进行测试,但在生产中,主机名称和端口会有所不同。所以我也想问一下管理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();

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

最新更新