#spring #spring-boot #aop #spring-aop
#весна #spring-boot #aop #spring-aop
Вопрос:
Я планирую реализовать аспект, чтобы захватить следующие значения для данного rest API при успешном возврате в моем приложении spring boot:
- конечная точка api, например, /api/ …
- Http-глагол. т. е. PUT / POST и т. Д
- Полезная нагрузка запроса и параметр запроса / запроса
Я делаю это следующим образом:
@Aspect
public class MyAspect {
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Pointcut("within(com.web.rest.*)")
public void applicationResourcePointcut() {
}
@AfterReturning(value = ("applicationResourcePointcut()"),
returning = "returnValue")
public void endpointAfterReturning(JoinPoint p, Object returnValue) throws Throwable {
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
System.out.println("REQUEST PAYLOAD = " mapper.writeValueAsString(p.getArgs()));
System.out.println("METHOD NAME = " p.getSignature().getName());
System.out.println("RESPONSE OBJECT = " mapper.writeValueAsString(returnValue));
//CAN NOT UNDERSTAND HOW TO CAPTURE HTTP VERB AND ENDPOINT HERE
}
}
Может ли кто-нибудь, пожалуйста, помочь здесь в захвате Http-глагола и конечной точки api?
Комментарии:
1. Трудно рассуждать о вашем вопросе (кроме как придумать более глобальное решение, подобное предложенному 4rpit), если вы не показываете свои целевые классы, а только аспект. Может быть, у них есть какая-то информация о запросе в полях или параметрах метода? Если это так, аспект может получить доступ к этой информации. Но мне нужно было бы сначала увидеть хотя бы один целевой класс, чтобы сообщить вам.
Ответ №1:
Вы должны получить объект запроса и можете получить из него требуемые значения
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
.getRequest();
и использовать методы, доступные в HttpServletRequest
request.getParameterMap()
request.getMethod()
request.getRequestURL()
Комментарии:
1. Привет, @4rpit спасибо за ваш ответ. Могу ли я сделать это в аспекте, который я упомянул выше?
2. Без проблем, радость, да, вы можете это сделать.
3. Привет @ 4rpit, не могли бы вы показать, как мы делаем это внутри аспекта? Я не могу понять, как я могу получить доступ к запросу внутри аспекта?
4. Почему бы вам просто не попробовать? Как вы могли заметить, это вызов статического метода. Итак, в чем проблема?
5. Конечно, @kriegaex. Спасибо.