#java #spring-boot
Вопрос:
Как получить URL-адрес на уровне службы приложений с помощью SpringBoot? Мне нужно сохранить ссылку на запись в БД, например:
var entity = new Entity();
entity.setUrl(serverURL/API(with id));
Самое сложное для меня-это как получить ServerURL: это может быть локальный хост, preprod.site.com или prod.site.com. Я могу попросить у контроллера запрос на получение, но это выглядит ужасно.
Ответ №1:
Вы можете использовать ServletUriComponentsBuilder.fromCurrentRequest() для получения на UriComponentsBuilder
основе текущего HttpServletRequest
:
int id = 4711;
String url = ServletUriComponentsBuilder.fromCurrentRequest()
.path("/your/path/with/{id}")
.buildAndExpand(id)
.toUriString();
Ответ №2:
Не запрашивайте разумную информацию «в контексте» внутри вашей бизнес-логики.
Вместо этого добавьте объект запроса в качестве параметра для контроллера метода и при необходимости где-нибудь внедрите его:
@Controller
public class MyController {
@Autowired
private MyBusinessLogic myBusinessLogic;
@GetMapping("/my-path/..."})
public String index(..., HttpServletRequest request) {
String myURL = request.getRequestURI();
myBusinessLogic.doTransaction(..., myURL, ...);
ваш код будет более надежным, проверяемым, несвязанным, многоразовым …
Комментарии:
1. может быть, я не описал полный контекст. Служба является прослушивателем Кафки, и мне нужно создать ссылку с идентификатором из БД, но прежде мне нужно сохранить новую сущность