Регистрация всего класса контроллера отдыха весной - PullRequest
5 голосов
/ 31 января 2020

У меня контроллер покоя содержит много методов

@RestController
@RequestMapping("v1/test")
public class TestRestController {

   ...... 100 methods (GET, POST, PATCH, etc)
}

Как узнать, к какому методу обращаются, не используя print в каждом методе?
Есть ли способы сделать это?

Ответы [ 3 ]

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

Вы можете использовать Spring AOP:

package com.example;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class ExampleAspect {

    @Before("execution(* com.example.TestRestController(..)")
    public void log(JoinPoint joinPoint) {
        System.out.println("Executing :" + joinPoint.toString());
    }
}

1 голос
/ 31 января 2020

Хотя вы можете использовать тактику AOP, отмеченную в других ответах, для регистрации методов, есть лучшие подходы, если все, что вы хотите сделать, это записать все запросы и ответы для конечных точек, которые реализуют эти методы. Это можно сделать несколькими способами: использовать SpringRegestLoggingFilter или написать свой собственный HandlerInterceptor. Вот хорошая статья о первых двух вариантах.

1 голос
/ 31 января 2020

Использование аспектно-ориентированного программирования с пружиной:

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;    

@Aspect
public class SpringAspect {

    private static final Logger LOG = LoggerFactory.getLogger(SpringAspect.class);

    @Before("execution(* sample.package.path.TestRestController.*(..))")
    public void executedMethodsLogger(JoinPoint joinPoint) {
        LOG.info("[ Executed method {} ]", joinPoint.toString());
    }

}
...