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.
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);
}));
}
}
}
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.
Comment obtenir la classe avec les annotations définies lors de l'exécution Java
Recommended Posts