【发布时间】:2018-12-17 01:50:26
【问题描述】:
我正在一个 SpringBoot 项目中工作,我正在开发一个休息端点,它将接收一些参数,并基于这些参数我将创建一个 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,只是用来自方法 retrieveImageryBaseMap 的参数替换了这些值。想知道是否有更好的方法或者是否可以。
2) 我还在 url String url = "https://host-name:6443/external/Image/export?bbox="+ param1 +"%" + param2+ "+%"+ param3 + "%" + param4 +"&format=png&f=image"; 中硬编码了主机名和端口现在我只是使用 dev 主机名测试它,但在生产中主机名和端口会有所不同。所以还想问管理url中主机名的最佳方法/做法?我应该这样硬编码还是使用不同的方法?
大家非常感谢任何帮助,我自己一个人工作,不幸的是没有导师来问这些问题并被困在这里。
干杯!
【问题讨论】:
-
一个小问题,为什么要通过 PathVariable 传递参数?
-
是的,PathVariable
-
如果这些参数来自互联网客户端,您真的希望在从中构造 URL 之前对其进行验证。
-
@AndyBrown 这是一个完整的端点。客户将发送地理坐标。
标签: java spring api spring-boot endpoint