SpringAOP
使用@Around增强环绕时,修改方法返回值导致request中所有attribute丢失的办法:
将返回值转为Object
直接返回String的话会丢失request,修改成Object即可
贴上代码:
package com.diecolor.aspect;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import com.diecolor.annotation.CheckMobile;
import com.diecolor.controller.BaseController;
import com.diecolor.util.DeviceUtils;
@Aspect
@Component
public class CheckMobileAspect{
@Autowried
private HttpServletRequest request;
@Around("within(com.*..*) && @annotation(checkMobile)")
public Object checkMobile(ProceedingJoinPoint point, CheckMobile checkMobile) throws Throwable {
Object returnObj = point.proceed();
boolean isMobile = DeviceUtils.isMobileDevice(request);
if (isMobile) {
returnObj = checkMobile.value();
}
return returnObj;
}
}
checkMobile.value()
获取的是String类型值,在这里将它转为超级父类Object再返回,就不会丢失request了