这里我在url里面的参数,aop的webLogAspect类也没有获取到啊?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package com.imooc.mall.filter; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.util.Arrays; /** * 描述: 打印请求和响应信息 */ @Aspect @Component public class WebLogAspect { private final Logger log = LoggerFactory.getLogger(WebLogAspect. class ); // 拦截点 @Pointcut ( "execution(public * com.imooc.mall.controller.*.*(..))" ) public void webLog(){ } // 请求信息 @Before ( "webLog()" ) public void doBefore(JoinPoint joinPoint){ ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); log.info( "URL:" + request.getRequestURL().toString()); log.info( "HTTP_METHOD:" + request.getMethod()); log.info( "IP:" + request.getRemoteAddr()); log.info( "CLASS_METHOD:" +joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()); log.info( "ARGS:" + Arrays.toString(joinPoint.getArgs())); } // 响应信息 @AfterReturning (returning = "res" ,pointcut = "webLog()" ) public void doReturning(Object res) throws JsonProcessingException { log.info( "RESPONSE:" + new ObjectMapper().writeValueAsString(res)); } } |
11
收起
正在回答 回答被采纳积分+1
1回答
好帮手慕小蓝
2023-09-07 11:10:21
同学你好,从同学的截图中看到,参数id实际上是已经获取到了的。
同学的疑问是否在日志中URL字段中,只有“http://localhost:8080/getUser”而没有拼接的“id=1”?
在请求中,URL的定义是统一资源定位系统(uniform resource locator;URL)是因特网的万维网服务程序上用于指定信息位置的表示方法。而这个定位中是不包含参数的,只不过在GET请求时,将参数拼接在URL的后面了。虽然拼接了,但不代表参数就是URL的一部分了。所以在解析的时候,URL和参数是单独解析的,也就是日志中只有URL,而参数单独存储在id中了。
祝学习愉快~
Java工程师 2024版
- 参与学习 2036 人
- 提交作业 1398 份
- 解答问题 1263 个
2024重磅革新,超百小时内容豪华升级,加速提升高级技能与高薪就业竞争力 课程紧贴企业最新人才需求,历经7年持续迭代,帮助万名学子入行转行 从零起点到高阶实战,学习路径稳健顺滑,成就从小白到工程师高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧