2017-07-28 5 views
0

Comment obtenir un URL de point de terminaison de contrôleur de démarrage de ressort spécifique sans chaînes concat/hardcode? Mon cas est le besoin d'envoyer une requête à l'URL externe et d'en recevoir une notification asynchrone, donc j'ai besoin de passer mon URL de fin de notification. Voici un exemple de code:Comment faire pour obtenir l'URL de point de terminaison du contrôleur de démarrage de printemps?

@RestController 
    @RequestMapping("/api/v1") 
    public class MyController { 

     @PostMapping("/sendRequest") 
     public void sendRequest() { 
      ... 
      // 1. get /notifyStatus endpoint full url to be send to external service 
      String myNotificationFullUrl = xxx ? 
      // 2. call external service 
     } 

     @GetMapping("/notifyStatus") 
     public void notifyStatus() { 
      ... 
     } 
    } 

Répondre

0

Permet d'obtenir une URL sur votre système, pas seulement une URL actuelle.

import org.springframework.hateoas.mvc.ControllerLinkBuilder 
... 
ControllerLinkBuilder linkBuilder = ControllerLinkBuilder.linkTo(methodOn(YourController.class).getSomeEntityMethod(parameterId, parameterTwoId)) 

URI methodUri = linkBuilder.Uri() 
String methodUrl = methodUri.getPath() 

Il existe plusieurs méthodes aussi pour changer un nom d'hôte, etc.

+1

ça marche! Merci beaucoup! –

0

si vous ne voulez pas hardcode, peut-être une solution possible est d'ajouter un messages.properties avec tous vos messages et urls. Ensuite, vous pouvez configurer Spring MessageSource et obtenir votre URL à partir de ce fichier.

Supose que vous avez un fichier message.properties avec la propriété suivante:

url=full_url_to_your_service 

Dans votre @Controller, injecter votre configuration MessageSource pour permettre printemps résoudre les messages:

@Autowired 
private MessageSource messageSource; 

Ensuite, vous pouvez obtenir votre URL comme suit:

String url= messageSource.getMessage("url", put_here_your_locale); 

Si vous n eed plus d'informations, vérifiez Spring doc pour MessageSource.