J'ai un contrôleur de repos avec l'annotation @GetMapping pour mapper les requêtes HTTP sur des méthodes de gestion spécifiques:
@Service class EmailService(val config: Config){ fun sendEmail(){ // send "config.baseUrl/${getMethodPath()}" } fun getMethodPath(){ //todo } }
J'ai également un service de messagerie où je dois envoyer un e-mail avec un lien vers mon point de terminaison ( dans ce cas http: // hôte / méthode )
@RestController class Handler(){ @GetMapping(path = ["method"]) fun handlerMethod(){ //... } }
Ici, j'obtiens l'URL de base de la configuration ( http: // hôte ). Existe-t-il un moyen d'obtenir l'attribut de chemin dans EmailService à partir de @GetMapping de Handler pour créer un lien vers mon service?
3 Réponses :
Vous pouvez obtenir les informations de chemin à partir de l'objet HttpServletRequest. Veuillez vérifier ceci:
Comment obtenir l'URL de la requête dans Spring Boot RestController a>
Si vous n'obtenez pas le chemin exact, vérifiez ceci pour différentes approches pour obtenir des chemins:
Quelle est la différence entre les méthodes getRequestURI et getPathInfo dans HttpServletRequest? < / a>
vous pouvez obtenir la requête liée au thread actuel par RequestContextHolder
.
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes ()). getRequest ()
Le code ci-dessus obtiendra le HttpServletRequest
et vous pourrez ensuite utiliser [HttpServletRequest # getPathInfo ()] [1]
pour obtenir le chemin
de l'URL
Spring est compatible avec cette tâche. Dans votre méthode de contrôleur, passez un paramètre de type UriComponentsBuilder
. Ce constructeur aura toutes les informations sur le routage actuel de la requête (nom d'hôte, port, chemin, etc.). Vous pouvez ensuite utiliser MvcUriComponentsBuilder
pour que Spring construise le lien dont vous avez besoin (Java, mais il devrait être équivalent dans Kotlin):
MvcUriComponentsBuilder.relativeTo(builderParameter) .fromMethod(Handler.class, "method")
Peut-être que cela pourrait vous aider: stackoverflow.com/questions/12710307/...