Я работаю с Spring AOP, чтобы определить общий резервный метод вместо дублирования кода. Я использовал @Around, так как мне нужно вернуть объект из Aspect. Я пытаюсь решить совет @Around в зависимости от полученного ответа, но не могу этого сделать. Вот мой контроллер:
@RequestMapping(value = "/add/employee", method = RequestMethod.GET)
public EmployeeResponse addEmployee(@RequestParam("name") String name, @RequestParam("empId") String empId) {
EmployeeResponse employeeResponse=employeeService.createEmployee(name, empId);
return employeeResponse;
}
createEmployee в классе обслуживания используется для вызова другой конечной точки для вставки некоторых данных. Я хочу принять решение на основе ответа employeeResponse, но не могу это сделать. Я также пробовал @AfterReturning, но я не могу вернуть объект, если использую его.
Ниже мой класс аспекта:
@Around(value = "execution(* com.test.service.EmployeeService.*(..)) and args(name,empId)")
public Object getAllAdvice2(ProceedingJoinPoint pjp, String name,String empId) throws Throwable {
System.out.println("Inside Aspect");
Object[] arguments = pjp.getArgs();
if (!checkForPath()) {
return pjp.proceed();
}
System.out.println("Call Second path please!!");
return arguments;
}
private boolean checkForPath() {
HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
.getResponse();
return response.getStatus()==501?true:false;
}
}
Я использовал HttpServletResponse и RequestContextHolder для получения контекста но, похоже, он будет использовать текущий контекст, то есть "/ add / employee". Как я могу вернуть фактический статус из checkForPath () (поскольку мне не нужно вызывать pjp.proceed для каждого возвращенного кода состояния), чтобы я мог выполнить строку System.out.println («Вызовите второй путь, пожалуйста !! "); в зависимости от моего кода ошибки.
Кто-нибудь может подсказать, где что-то не так?