[JAVA] Obtenez le chemin défini dans la classe Controller de Spring Boot sous forme de liste

Lors de la création de sitemap.xml pour un site construit avec SpringBoot, j'ai vérifié comment obtenir la valeur de l'annotation @RequestMapping attachée à la méthode de la classe Controller, alors prenez note.

Conclusion

Ignorez les exceptions et les variables de chemin et obtenez quand même la liste des chaînes de chemin définies dans l'annotation.

Test.java


import java.util.Arrays;
import java.util.Set;

import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.core.type.filter.AnnotationTypeFilter;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

public class Test {
    public static void main(String[] args) throws ClassNotFoundException {
        
        ClassPathScanningCandidateComponentProvider scanner =
                new ClassPathScanningCandidateComponentProvider(false);
        
        scanner.addIncludeFilter(new AnnotationTypeFilter(Controller.class));
        
        Set<BeanDefinition> beanSet = scanner.findCandidateComponents("/* controller package string */");
        
        for (BeanDefinition def : beanSet) {
            Class<?> clazz = Class.forName(def.getBeanClassName());
            Arrays.stream(clazz.getDeclaredMethods()).map(m -> m.getAnnotation(RequestMapping.class)).filter(
                    a -> a != null && a.value().length > 0).forEach(a -> Arrays.stream(a.value()).forEach(p ->{
                        System.out.println(p);
                    }));
        }
    }
}

Le point

La partie qui utilise ClassPathScanningCandidateComponentProvider pour obtenir les métadonnées du printemps C'est le foie. En dehors de cela, j'obtiens généralement la méthode par réflexion et je regarde régulièrement la valeur de l'annotation. Pour en faire un plan du site réaliste, vous devrez peut-être faire attention, par exemple en remplaçant les variables par des valeurs attendues, en excluant les URL privées, etc.

référence

Comment obtenir la classe avec les annotations définies lors de l'exécution Java

Recommended Posts

Obtenez le chemin défini dans la classe Controller de Spring Boot sous forme de liste
Obtenez une instance proxy du composant lui-même dans Spring Boot
[rails] Liste des actions définies dans Controller
Obtenez une liste des autres sessions du même utilisateur lorsque vous utilisez Redis Session avec Spring Boot (série 2). Jetez-le également.
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java
Spécifiez le codage des ressources statiques dans Spring Boot
Obtenez le nom du scénario de test dans la classe de test JUnit
Obtenez une liste de classes dans un package spécifique à Guava
Une histoire remplie des bases de Spring Boot (résolu)
Un programme qui compte le nombre de mots dans une liste
Examinez la liste des ID de fuseau horaire disponibles dans la classe Java ZoneId
Obtenez l'URL publique du fichier privé de Flickr en Java
Comment afficher une liste de chaînes dans JSF sous forme de chaînes séparées par des virgules
[Spring Boot] Jusqu'à ce que @Autowired soit exécuté dans la classe de test [JUnit5]
Je veux connaître la méthode du contrôleur où l'exception a été levée dans le ExceptionHandler de Spring Boot
Obtenez le résultat de POST en Java
Les champs auto-câblés dans une classe qui hérite de TextWebSocketHandler dans Spring Boot deviennent NULL
Étapes pour rendre Spring Boot capable de faire référence à la valeur dans le fichier de propriétés
Comment obtenir la date actuelle sous forme de chaîne au format aaaaMMjj
[Java] Comment accéder au début d'une chaîne spécifique à l'aide de la classe String
[Spring Boot] Liste des règles de validation qui peuvent être utilisées dans le fichier de propriétés pour les messages d'erreur
graphql-ruby: Comment obtenir le nom de la requête ou de la mutation dans le contrôleur Remarque
Présentation de Spring Boot Actuator, une fonctionnalité qui facilite l'utilisation des applications Spring Boot
Comment obtenir l'ID d'un utilisateur qui s'est authentifié avec Firebase dans Swift
Organisez les différences de comportement de @NotBlank, @NotEmpty et @NotNull avec Spring Boot + Thymeleaf
Nommer et appeler explicitement des méthodes de classe parent dans Ruby
Connectez-vous aux applications Web Spring Boot sur la plate-forme Microsoft ID
Définir la source de l'ensemble de bibliothèques en tant que dépendance dans IntelliJ en tant que module distinct du projet
Comment définir des variables d'environnement dans le fichier de propriétés de l'application Spring Boot
Je veux obtenir récursivement la superclasse et l'interface d'une certaine classe
Testez le contrôleur avec Mock MVC dans Spring Boot
Exécuter un projet Spring Boot avec VS Code
Mesurer la taille d'un dossier avec Java
Quand tu te perds dans le nom de la classe
L'histoire de la montée de la série Spring Boot 1.5 à la série 2.1
Vérifions la sensation de Spring Boot + Swagger 2.0
Comment ajouter un chemin de classe dans Spring Boot
Conseils Java - Créez un projet Spring Boot avec Gradle
Un examen rapide de Java appris en classe
Afficher la tâche Gradle dans le projet Spring Boot
Je veux trouver la somme de contrôle MD5 d'un fichier en Java et obtenir le résultat sous forme de chaîne de caractères en notation hexadécimale.
Comment obtenir le nom de classe de l'argument de LoggerFactory.getLogger lors de l'utilisation de SLF4J en Java
Extrait la valeur de HashMap et renvoie le résultat trié par valeur de valeur sous forme de liste.
[Spring Boot] L'histoire selon laquelle le bean de la classe avec l'annotation ConfigurationProperties n'a pas été trouvé
Vérifiez le comportement de getOne, findById et des méthodes de requête avec Spring Boot + Spring Data JPA
Personnalisez l'affichage lorsqu'une erreur telle que 404 Not Found se produit dans Spring Boot
Obtenez plusieurs ressources qui correspondent au modèle au printemps
Exécution asynchrone des requêtes examinée dans Spring Boot 1.5.9
Obtenir une liste d'informations MBean pour les applications Java
Un examen rapide de Java appris en classe part4
[Pour les débutants] DI ~ Les bases de DI et DI au printemps ~
Un mémorandum de dépendance à Spring Boot2 x Doma2
Accédez au h2db intégré de Spring Boot avec jdbcTemplate
Comment créer un projet Spring Boot dans IntelliJ
J'ai essayé de réduire la capacité de Spring Boot
[Ruby / Rails] Définissez une valeur unique (unique) dans la classe