Попробуйте построить цикл и подсчитать ваши строки. Что-то связать это
rl = []
with opne("your_file") as fd:
cnt = 25 #let's start outside required line number after text
for l in fd.readlines():
cnt += 1
if "text" in l: # "text" in your line
cnt = 0 # reset counter
elif cnt in [3,12,13,14,15]: # if counter is one of lines you want
rl.append(l) # record them
print rl
Ваша проблема заключается не в аннотации @Before, а в ошибочной установке атрибута в HttpServletRequest вместо заголовка. Атрибут! = Заголовок. Поэтому, конечно, этот параметр будет нулевым в вашем контроллере.
Заголовки в HttpServletRequest доступны только для чтения. Вам нужно будет обернуть запрос в HttpServletRequestWrapper и выполнить все виды работ для управления исходными и вашими собственными заголовками. Существует множество примеров, в том числе полный: https://wilddiary.com/adding-custom-headers-java-httpservletrequest/
В нем представлен MutableHttpServletRequest, расширяющий HttpServletRequestWrapper. Вы будете сохранять состояние ваших пользовательских заголовков и просто их с оригинальными. Вам придется переопределить getHeader и getHeaderNames!
Ваш код @Before будет выглядеть примерно так:
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
MutableHttpServletRequest wrappedRequest = new MutableHttpServletRequest(request);
request.putHeader("traceId", ServiceUtil.getTraceId());
return request;
Однако, чтобы получить немного функциональности (если вам не нужно делать это снова и снова). Для разового использования я бы просто использовал технику @Around.
Вся эта церемония добавит ценность карте!
Я смог сделать это, используя @Around. Я считаю, что это невозможно сделать с помощью @Before.
@Around("execution(* com.test.api.*.*(..)) && " + "args(traceId,..)")
public Object setTraceId(ProceedingJoinPoint joinPoint, String traceId) throws Throwable
{
String newTraceId = ServiceUtil.getTraceId();
Object[] obj = joinPoint.getArgs();
obj[0] = newTraceId;
return joinPoint.proceed(obj);
}