Beim Erstellen von sitemap.xml für die mit SpringBoot erstellte Site habe ich überprüft, wie der Wert der Annotation @RequestMapping abgerufen wird, die an die Methode der Controller-Klasse angehängt ist. Machen Sie sich also eine Notiz.
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);
                    }));
        }
    }
}
So erhalten Sie die Klasse mit zur Java-Laufzeit definierten Anmerkungen
Recommended Posts