Получить метод HTTP из joinPoint - PullRequest
0 голосов
/ 15 января 2020

Мне нужно получить метод http, такой как POST / PATCH / GET / et c, из joinPoint в аспекте.

@Before("isRestController()")
    public void handlePost(JoinPoint point) {
        // do something to get for example "POST" to use below 
        handle(arg, "POST", someMethod::getBeforeActions);
    }

Из point.getThis.getClass() я получаю контроллер, который вызывает этот вызов перехватывается Затем, если я получу метод от него, а затем аннотации. Это должно быть достаточно хорошо, верно?

Итак point.getThis().getClass().getMethod(point.getSignature().getName(), ???) Как мне получить Class paramaterTypes?

1 Ответ

2 голосов
/ 15 января 2020

Следующий код получает необходимые подробности аннотации метода контроллера

    @Before("isRestController()")
public void handlePost(JoinPoint point) {
    MethodSignature signature = (MethodSignature) point.getSignature();
    Method method = signature.getMethod();

    // controller method annotations of type @RequestMapping
    RequestMapping[] reqMappingAnnotations = method
            .getAnnotationsByType(org.springframework.web.bind.annotation.RequestMapping.class);
    for (RequestMapping annotation : reqMappingAnnotations) {
        System.out.println(annotation.toString());
        for (RequestMethod reqMethod : annotation.method()) {
            System.out.println(reqMethod.name());
        }
    }

    // for specific handler methods ( @GetMapping , @PostMapping)
    Annotation[] annos = method.getDeclaredAnnotations();
    for (Annotation anno : annos) {
        if (anno.annotationType()
                .isAnnotationPresent(org.springframework.web.bind.annotation.RequestMapping.class)) {
            reqMappingAnnotations = anno.annotationType()
                    .getAnnotationsByType(org.springframework.web.bind.annotation.RequestMapping.class);
            for (RequestMapping annotation : reqMappingAnnotations) {
                System.out.println(annotation.toString());
                for (RequestMethod reqMethod : annotation.method()) {
                    System.out.println(reqMethod.name());
                }
            }
        }
    }
}

Примечание. Этот код можно дополнительно оптимизировать. Поделился в качестве примера, чтобы продемонстрировать возможности

...