Eh bien, il existe deux méthodes pour accéder plus facilement à ces données, mais l'interface n'offre pas la possibilité d'obtenir l'URL entière en un seul appel. Vous devez le construire manuellement:
public static String makeUrl(HttpServletRequest request)
{
return request.getRequestURL().toString() + "?" + request.getQueryString();
}
Je ne sais pas comment faire cela avec les installations Spring MVC.
Si vous souhaitez accéder à la requête actuelle sans la passer partout, vous devrez ajouter un écouteur dans le fichier web.xml:
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
Et puis utilisez ceci pour obtenir la demande liée au thread actuel:
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest()
HttpServletRequest
objet. C'est parce que j'utilise plusieurs classes / méthodes d'assistance et que je ne veux pas passer l'objet de requête à chaque fois.UrlUtils
. Fonctionne comme un charme.Au lieu d'utiliser
RequestContextHolder
directement, vous pouvez également utiliserServletUriComponentsBuilder
et ses méthodes statiques:ServletUriComponentsBuilder.fromCurrentContextPath()
ServletUriComponentsBuilder.fromCurrentServletMapping()
ServletUriComponentsBuilder.fromCurrentRequestUri()
ServletUriComponentsBuilder.fromCurrentRequest()
Ils utilisent
RequestContextHolder
sous le capot, mais offrent une flexibilité supplémentaire pour créer de nouvelles URL en utilisant les capacités deUriComponentsBuilder
.Exemple:
la source
ConstraintValidator
avecServletUriComponentsBuilder.fromCurrentRequestUri().toUriString();
.La classe URI de Java peut vous aider à en sortir:
la source
dans le fichier jsp:
la source
Vous pouvez également ajouter un
UriComponentsBuilder
à la signature de méthode de votre méthode de contrôleur. Spring injectera une instance du générateur créée à partir de la requête actuelle.En utilisant le générateur, vous pouvez directement commencer à créer des URI basés sur la demande actuelle, par exemple modifier les segments de chemin.
Voir aussi UriComponentsBuilderMethodArgumentResolver
la source
UriComponentsBuilder
n'inclut pas le chemin et les paramètres de requête de la requête. Si vous avez besoin d'accéder à ceux-ci, utilisezServletUriComponentsBuilder.fromCurrentRequest()
ou injectez une instance deHttpServletRequest
et utilisezServletUriComponentsBuilder.fromRequest(request)
Si vous avez besoin de l'URL jusqu'au nom d'hôte et non du chemin, utilisez la bibliothèque commune d'Apache
StringUtil
, et à partir de l'URL, extrayez la sous-chaîne jusqu'au troisième indexOf/
.Exemple: si fullURL est
https://example.com/path/after/url/
alors Output serahttps://example.com
la source