По сути, я реализую некоторые динамические журналы в моем Spring Boot App, и мне нужно регистрировать исключения, помещенные в слой Service, в зависимости от того, какой вызов API привел к возникновению исключения во время выполнения метода где-то внизу на уровне Service.,Я хочу знать, могу ли я проверить в этом методе, какой API привел нас к текущей точке выполнения?
Мне известно, что я могу использовать трассировку стека, чтобы по существу отследить до конкретного метода Controller, который привел к текущей точке выполнения, однако это связано с некачественным кодом, где я активно проверяю,StackTraceElement содержит «.controller» в качестве подстроки.Кроме того, трассировка стека может быть очень длинной, если задействована рекурсия, что ведет к неэффективности.Есть ли альтернативы?или можно сделать этот подход более эффективным / более чистым?
Контроллер:
@PostMapping(value = "/apiOne")
public Response exchangeApi1(){
....
someService.doMethod(params);
....
}
@PostMapping(value = "/apiTwo")
public Response exchangeApiTwo(){
....
someService.doMethod(params);
....
}
Сервисный уровень:
@Service
public class SomeService {
....
public void doMethod(params){
....
String api = getCallingAPI()//I need this method. Does such a thing exist in native Spring libraries?
switch (api) {
case "apiOne":
LOG.error(Alert Level 1);
break;
case "apiTwo":
LOG.error(Alert Level 3);
break;
throw BusinessException();
.....
}
......
}
Мне нужно что-то, что по существу будет работать как getCallingAPI() в приведенном выше фрагменте.
РЕДАКТИРОВАТЬ: я понимаю, что я могу передать имя API в качестве параметра, но я забыл упомянуть, что doMethod () / исключение может быть несколько служебных слоев внизи имя API будет по существу бесполезным для многих методов, которые в конечном итоге приводят к выполнению doMethod / везде, где выдается исключение.Мне нужно что-нибудь чище.