利用@Around通知修改Controller的返回值
自定义一个注解@OperationBtn
在切入点Controller上加上自定义注解
接下来就是重点了,AspectJ写切面类,对该Controller 1 @Component
2 @Aspect
3 public class OperationBtnAspect {
4
5 @Autowired
6 private AppTableOperationServiceI appTableOperationService;
7
8
9 @Around(value = "@annotation(anno)", argNames = "anno")
10 public AjaxJson aroundMthod(ProceedingJoinPoint point, OperationBtn anno) throws Throwable{
11 RequestAttributes ra = RequestContextHolder.getRequestAttributes();
12 ServletRequestAttributes sra = (ServletRequestAttributes) ra;
13 HttpServletRequest request = sra.getRequest();
14
15 String url = request.getRequestURL().toString(); // http://localhost:8080/5U/appDataController.do (URL:返回的是完整的url,包括Http协议,端口号,servlet名字和映射路径,但它不包含请求参数。)
16 String method = request.getMethod(); // POST
17 String uri = request.getRequestURI(); // /5U/appDataController.do
18 String queryString = request.getQueryString(); // addOrUpdateData&operId=402881e8645f580501645f61202c0044&optId=402881e8645f580501645f61203d004c(返回url路径后面的查询字符串)
19 queryString = queryString.substring(queryString.indexOf("operId"));
20 queryString = queryString.substring(7,queryString.indexOf("&"));
21 AppTableOperationEntity operationEntity = appTableOperationService.getEntity(AppTableOperationEntity.class, queryString);
22 AjaxJson json = (AjaxJson) point.proceed(); //执行Controller中方法,得到返回值json
23 if(json.isSuccess() && operationEntity !=null && operationEntity.getCallbackSucMsg() !=null){
24 json.setMsg(operationEntity.getCallbackSucMsg());
25 }else if(!json.isSuccess() && operationEntity !=null && operationEntity.getCallbackSucMsg() !=null){
26 json.setMsg(operationEntity.getCallbackFailMsg());
27 }
28 return json;
29 }
30 }