web-dev-qa-db-fra.com

Spring RestTemplate: l'URI n'est pas absolu

J'essaie de me connecter à un service RESTful Spring sur le même serveur que mon application Web.

J'aimerais utiliser un chemin "relatif" car il pourrait être installé sur plusieurs environnements (localhost, test, production) mais je reçois le message d'erreur suivant: URI is not absolute.

Comment appeler un service qui s'exécute sur une autre application Web sur le même serveur?

Mon code est comme suit:

final RestTemplate restTemplate = new RestTemplate();
URI uri;
try {
    String url = "app2/myservice?par=1";
    uri = new URI(url);
    String result = restTemplate.getForObject(uri, String.class);
    System.out.println(result);
} catch (URISyntaxException e) {
    logger.error(e.getMessage());
}

Merci.

Mettre à jour:

Je l'ai résolu en obtenant l'hôte, le portage, etc. de la request, pourrait-il s'agir d'une solution juste et élégante? C'est mon code simplifié actuel:

String scheme = request.getScheme();
String userInfo = request.getRemoteUser();
String Host = request.getLocalAddr();
int port = request.getLocalPort();
String path = "/app2/myservice";
String query = "par=1";
URI uri = new URI(scheme, userInfo, Host, port, path, query, null);
boolean isOK = restTemplate.getForObject(uri, Boolean.class);
if (isOK) {
    System.out.println("Is OK");
}
3
Alessandro

Vous ne pouvez pas le faire en tant que votre code dans le premier extrait; L'URI doit identifier ENTIÈREMENT la ressource à laquelle vous essayez d'accéder. Votre deuxième extrait est à peu près le seul moyen de faire ce que vous essayez de faire. Il y a peut-être d'autres moyens, mais je ne peux en penser à personne. 

Bien sûr, avec votre approche, vous dictez l'architecture de votre système et le modèle de déploiement en code , ce qui n'est presque jamais une bonne idée.

0
banncee

Votre URLapp2/myservice?par=1n'est pas complète si votre service s'exécute sur une autre application Web ou sur le même serveur. 

Vous devez compléter le chemin en donnant l'URL de base signifielocalhost:8080/yourApp/app2/myservice?par=1alors les choses pourraient fonctionner pour vous.

Vérifiez également l'accès au package.

1
kushal baldev