Nun, es gibt zwei Methoden, um einfacher auf diese Daten zuzugreifen, aber die Schnittstelle bietet nicht die Möglichkeit, die gesamte URL mit einem Aufruf abzurufen. Sie müssen es manuell erstellen:
public static String makeUrl(HttpServletRequest request)
{
return request.getRequestURL().toString() + "?" + request.getQueryString();
}
Ich weiß nicht, wie ich dies mit Spring MVC-Einrichtungen tun kann.
Wenn Sie auf die aktuelle Anforderung zugreifen möchten, ohne sie überall zu übergeben, müssen Sie einen Listener in der Datei web.xml hinzufügen:
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
Verwenden Sie diese Option, um die Anforderung an den aktuellen Thread zu binden:
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest()
HttpServletRequest
Objekt tatsächlich zu verwenden . Dies liegt daran, dass ich mehrere Hilfsklassen / -methoden verwende und das Anforderungsobjekt nicht jedes Mal übergeben möchte.UrlUtils
. Klappt wunderbar.Anstatt
RequestContextHolder
direkt zu verwenden, können Sie auchServletUriComponentsBuilder
und seine statischen Methoden verwenden:ServletUriComponentsBuilder.fromCurrentContextPath()
ServletUriComponentsBuilder.fromCurrentServletMapping()
ServletUriComponentsBuilder.fromCurrentRequestUri()
ServletUriComponentsBuilder.fromCurrentRequest()
Sie werden
RequestContextHolder
unter der Haube verwendet, bieten jedoch zusätzliche Flexibilität beim Erstellen neuer URLs mit den Funktionen vonUriComponentsBuilder
.Beispiel:
quelle
ConstraintValidator
mit zu bekommenServletUriComponentsBuilder.fromCurrentRequestUri().toUriString();
.Die URI-Klasse von Java kann Ihnen dabei helfen:
quelle
in jsp Datei:
quelle
Sie können
UriComponentsBuilder
der Methodensignatur Ihrer Controller-Methode auch eine hinzufügen . Spring fügt eine Instanz des Builders ein, die aus der aktuellen Anforderung erstellt wurde.Mit dem Builder können Sie direkt mit der Erstellung von URIs beginnen, die auf der aktuellen Anforderung basieren, z. B. Pfadsegmente ändern.
Siehe auch UriComponentsBuilderMethodArgumentResolver
quelle
UriComponentsBuilder
die Pfad- und Abfrageparameter der Anforderung nicht enthält. Wenn Sie auf diese zugreifen müssen, verwendenServletUriComponentsBuilder.fromCurrentRequest()
oder injizieren Sie eine Instanz vonHttpServletRequest
und verwenden SieServletUriComponentsBuilder.fromRequest(request)
Wenn Sie die URL bis zum Hostnamen und nicht den Pfad benötigen, verwenden Sie die Common Lib
StringUtil
von Apache und extrahieren Sie aus der URL den Teilstring bis zum dritten indexOf/
.Beispiel: Wenn fullurl ist
https://example.com/path/after/url/
dann Output wirdhttps://example.com
quelle