Liste de tous déployés reste des points de terminaison (printemps-démarrage, jersey)
Est-il possible de la liste de tous mes configuré reste-points de terminaison avec spring boot? L'actionneur répertorie tous les chemins existants au démarrage, je veux quelque chose de similaire pour mes services personnalisés, afin que je puisse vérifier au démarrage si tous les chemins d'accès sont configurés correctement et d'utiliser cette info pour les appels des clients.
Comment dois-je faire? J'utilise @Path
/@GET
annotations sur mon service de haricots et de les enregistrer via ResourceConfig#registerClasses
.
Est-il un moyen d'interroger la Config pour tous les Chemins?
Mise à jour: - je m'inscrire au RESTE Contrôleurs via
@Bean
public ResourceConfig resourceConfig() {
return new ResourceConfig() {
{
register(MyRestController.class);
}
};
}
Update2: je veux avoir quelque chose comme
GET /rest/mycontroller/info
POST /res/mycontroller/update
...
Motivation: au printemps lorsque le démarrage de l'app a commencé, je veux imprimer tous enregistrés contrôleurs et leurs chemins d'accès, afin que je puisse arrêter de deviner lequel les ordinateurs d'extrémité à utiliser.
OriginalL'auteur Jan Galinski | 2015-09-11
Vous devez vous connecter pour publier un commentaire.
Probablement la meilleure façon de le faire est d'utiliser un
ApplicationEventListener
. De là, vous pouvez écouter de la "demande d'terminé l'initialisation de l'événement", et d'obtenir leResourceModel
de laApplicationEvent
. LeResourceModel
aurez toutes les initialiséResource
s. Ensuite, vous pouvez parcourir laResource
comme d'autres l'ont mentionné. Ci-dessous est une mise en œuvre. Certains de la mise en œuvre a été prise à partir de laDropwizardResourceConfig
mise en œuvre.Ensuite, vous avez juste besoin d'enregistrer l'écouteur avec Jersey. Vous pouvez obtenir le chemin de l'application de la
JerseyProperties
. Vous aurez besoin de le fixer dans le Ressort de Démarrageapplication.properties
en vertu de la propriétéspring.jersey.applicationPath
. Ce sera le chemin de la racine, comme si vous étiez à utiliser@ApplicationPath
sur votreResourceConfig
sous-classeUne chose à noter, c'est que le load-on-startup n'est pas définie par défaut sur le Maillot de servlet. Ce que cela signifie, c'est que ce Maillot ne se charge pas au démarrage jusqu'à la première demande. Vous ne voyez donc pas que l'auditeur a déclenché jusqu'à la première demande. J'ai ouvert un problème possible d'obtenir une propriété de configuration, mais en attendant, vous avez deux options:
Configurer Maillot de filtre, au lieu d'une servlet. Le filtre sera chargé au démarrage. À l'aide de Jersey comme un filtre, pour la plupart des post, vraiment ne se comporte pas différemment. Pour configurer cela, vous avez juste besoin d'ajouter un Ressort de Démarrage de la propriété dans le
application.properties
L'autre option est de remplacer le Maillot
ServletRegistrationBean
et définir saloadOnStartup
de la propriété. Voici un exemple de configuration. Certains de la mise en œuvre a été pris directement à partir de laJerseyAutoConfiguration
Mise à JOUR
De sorte qu'il ressemble le Printemps de Démarrage va ajouter le
load-on-startup
de la propriété, de sorte que nous n'avons pas à remplacer le MaillotServletRegistrationBean
. Seront ajoutés au Démarrage 1.4.0Post un exemple de classe de ressource. Aussi loin que les OPTIONS et les wadl, il n'a pas vraiment beaucoup de filtre
Je l'ai corrigé. c'était gâcher, avec sous-ressource locators. Mais je viens de tester la nouvelle mise en œuvre, et tout fonctionne. J'ai aussi ajouté l'option pour inclure les OPTIONS et wadl, mais il est désactivé par défaut. Si vous le souhaitez, il suffit d'appeler le fluide
withOptions()
et/ouwithWadl()
lors de la création de l'auditeur.Merci beaucoup pour votre soutien!
Avec Servlet 3 l'auditeur peut être enregistré .@Fournisseur d'annotation. Dans ce cas, vous devez injecter ServletContext trop pour obtenir le chemin de contexte. Il a également commencé à immidiatelly sans besoin de configuration décrite ci-dessus.
OriginalL'auteur
Pouvez-vous utiliser
ResourceConfig#getResources
sur votreResourceConfig
objet, puis obtenir les informations dont vous avez besoin en parcourant la<Ressources>
il retourne?Excuses, serait de l'essayer, mais je n'ai pas le Ressources à le faire dès maintenant. :-p
OriginalL'auteur
Après l'application est complètement démarré, vous pouvez demander
ServerConfig
:classes
contient toutes les mises en cache d'extrémité classes.De l'API docs pour
javax.ws.rs.core.Configuration
:Cependant, vous ne pouvez pas le faire dans le code d'initialisation de votre application, les classes ne soient pas encore totalement chargé.
Avec les classes, vous pouvez les numériser pour les ressources:
J'ai modifié la réponse avec le code que j'utilise pour récupérer ces informations. Nous n'utilisons pas de Printemps-Boot, mais Tomcat/Jersey, mais le principe doit être le même que vous avez un
ResourceConfig
de travailler avec. Il suffit de l'essayer et voir si cela fonctionne ou si le Printemps contrôleur de l'héritage met des bâtons dans les roues.Je viens reconnus et récompensés peeskillets réponse. Le vôtre est en regardant de très près, mais il a eu le code complet de l'exemple. Merci en tout cas!
OriginalL'auteur
Que sur l'utilisation de
RequestMappingHandlerMapping
qui détiennent tous les postes de l'information.Voir ma réponse à Comment accéder à toutes les routes disponibles de une API REST à partir d'un contrôleur?.
OriginalL'auteur