Я работаю в проекте 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";. Сейчас я просто тестирую это, используя имя хоста разработчика, но в производстве имя хоста и порт будут другими. Итак, также хотел бы спросить, как лучше всего управлять именем хоста в URL-адресе? Следует ли мне жестко запрограммировать это или использовать другой подход?
Ребята, очень благодарны за любую помощь, я работаю один и, к сожалению, у меня нет наставника, чтобы задавать такие вопросы, и я застрял здесь.
Ваше здоровье!
Вы можете прокрутить этот пост stackoverflow.com/questions/13715811/…
Да, переменная пути
Если эти параметры поступают от интернет-клиентов, вы В самом деле хотите проверить их перед построением из них URL.
@AndyBrown - это спокойная конечная точка. Клиент пришлет географические координаты.




Вы можете использовать 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
Спасибо @Mykhailo! Я проверю это! Очень оценил это!
Добавлен пример. Спасибо
@RafaelPaz В дополнение к этому я настоятельно рекомендую вам сохранить базовый URL-адрес https://host-name:6443/external/Image/ в файле application.properties вместо жесткого кодирования в коде
Спасибо за подсказку @KunalPuri! Сделаю это! Большое спасибо за вашу помощь!
Еще раз спасибо @MykhailoMoskura очень помог, дружище! :)
Один небольшой вопрос, почему вы передаете параметры через PathVariable?