1
votes

Comment obtenir le chemin dans @GetMapping à partir d'un autre service

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?


1 commentaires

Peut-être que cela pourrait vous aider: stackoverflow.com/questions/12710307/...


3 Réponses :



1
votes

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


0 commentaires

0
votes

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")


0 commentaires