Вам нужен какой-то HandlerInterceptorAdapter
/ HandlerInterceptor
.
Внутри метода preHandle
вы можете получить объект HttpServletRequest
.
@Override
public boolean preHandle(
final HttpServletRequest request,
final HttpServletResponse response,
final Object handler
) throws Exception {
// Obtain only the hostname, with the associated port
final String hostOnly = request.getHeader("Host");
// Obtain the request URL, excluding query parameters
final String completeUrl = request.getRequestURL().toString();
// ... Continue towards the method handler
}
request.getRequestURL()
возвращает StringBuffer
, который можно использовать для манипулирования URL-адресом, прежде чем создавать из него String
.
Та же концепция извлечения URL-адресов может быть применена к @Controller
/ @RestController
метод-обработчик, если он вам нуженПросто введите HttpServletRequest
в качестве входного параметра.
@GetMapping
public ResponseEntity<?> myHandlerMethod(
final HttpServletRequest request,
/* other parameters */) {
...
}
Вы даже можете принять WebRequest
или NativeWebRequest
@GetMapping
public ResponseEntity<?> myHandlerMethod(
final WebRequest request,
/* other parameters */) {
final String host = request.getHeader("host");
...
}
@GetMapping
public ResponseEntity<?> myHandlerMethod(
final NativeWebRequest request,
/* other parameters */) {
final HttpServletRequest nativeRequest = request.getNativeRequest(HttpServletRequest.class);
final String host = request.getHeader("host");
...
}
Редактировать, основываясь на вашем комментарии.
@PostMapping(value = "myurl/{x}/(y)", produces = ...")
public ResponseEntity<String> doSomething(
final HttpServletRequest request,
@PathVariable("x") final String x,
@PathVariable("y") final String y) {
final String hostOnly = request.getHeader("Host"); // http://yourdomain.com:80
if (service.sendEmail(x, y, hostOnly)) {
return new ResponseEntity<>("...");
}
...