Как получить текущий URL-адрес сервера с уровня обслуживания

#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. может быть, я не описал полный контекст. Служба является прослушивателем Кафки, и мне нужно создать ссылку с идентификатором из БД, но прежде мне нужно сохранить новую сущность