当前位置: 首页 > news >正文

北京市建设和住房委员会官方网站广州seo工资

北京市建设和住房委员会官方网站,广州seo工资,wordpress themes free download,平湖网站建设公司前言 我们在开发的过程中,一般都需要对方法的入参进行打印,或者Debug调试的时候我们要查看方法入参的参数是否数量和数据正确性。 一般我们需要知道请求的参数、接口路径、请求ip等 但是考虑以后项目上线BUG排查的问题,最好的方式就是使用…

前言

我们在开发的过程中,一般都需要对方法的入参进行打印,或者Debug调试的时候我们要查看方法入参的参数是否数量和数据正确性。

一般我们需要知道请求的参数接口路径请求ip

但是考虑以后项目上线BUG排查的问题,最好的方式就是使用切面的方式来记录每个方法执行时要保存的日志处理,那么下面我们来实现一个使用自定义注解的方式来对每个请求的方法上进行日志存储

AOP切面:对某个方法进行增强处理,例如在某个方法执行前或者执行后进行操作。

案例

首先我们看一个controller接口

import lombok.extern.slf4j.Slf4j;@Slf4j
@RestController
@RequestMapping("/user/")
public class TestController {@PostMapping("getUserById")public String getUserById(@RequestBody User user) {log.info("/user/getUserById params:{}", user.toString());//执行代码逻辑...return "请求成功";}
}

这种一般没什么问题,一般我们测试的时候都可以这样来写,但如果有很多的方法,那么每个方法都这样写,显然很是繁琐,那么我们通过下面的方式来实现当进入方法前打印请求的一些信息

实现

我们自定义一个注解,名为Itboy

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)//ElementType.METHOD表示为该注解在方法上添加
public @interface Itboy {
}

然后需要用到一些依赖,这些是使用AOP的依赖,我们提前引入一下

<dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.14</version>
</dependency>
<dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.9.19</version>
</dependency>

然后我们定义一个切面类,名为ItboyAspect
注:这篇文章我使用的System打印方式,如果需要保存日志,换为对应的logger.info()即可。

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
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.text.SimpleDateFormat;
import java.util.Date;@Component
@Aspect
@Slf4j
public class ItboyAspect {//@Pointcut:为切入点,切入到Itboy这个注解上面@Pointcut("@annotation(com.mayikt.demo.Itboy)")public void itboyAspect() {}//@Before为在进入切点之前自动执行Before中的逻辑(进入之前的前提是方法上需要有我们设置的自定注解)@Before("itboyAspect()")public void beforeItboy(JoinPoint joinPoint) {//获取本次请求ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = requestAttributes.getRequest();//获取到方法名String methodName = joinPoint.getSignature().getName();System.err.println("======================================方法:" + methodName + "() 开始======================================");//执行时间SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date();String time = sdf.format(date);System.err.println("时间                 : " + time);//请求URLSystem.err.println("URL                 : " + request.getRequestURL());//请求方法System.err.println("HTTP Method         : " + methodName);//打印controller全路径和执行方法System.err.println("Class Method        : " + joinPoint.getSignature().getDeclaringTypeName() + "." + methodName);//请求IPSystem.err.println("IP                  : " + request.getRemoteHost());//请求入参System.err.println("Requert params      : " + JSON.toJSONString(joinPoint.getArgs()));}//后置通知@After("itboyAspect()")public void afterItboy(JoinPoint joinPoint) {//获取到方法名String methodName = joinPoint.getSignature().getName();System.err.println("======================================方法:" + methodName + "() 结束======================================");}
}

然后我们只需要在需要保存的方法上添加@Itboy注解即可

	@Itboy@PostMapping("selectUserList")public String getUserById(@RequestBody User user) {log.info("/user/selectUserList params:{}", user.toString());//执行代码逻辑...return "请求成功";}

最后我们来看一下效果

2023-04-02 14:21:29.033  INFO 5912 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms
======================================方法:getUserById() 开始======================================
时间                 : 2023-04-02 14:21:29
URL                 : http://127.0.0.1:8080/user/selectUserList
HTTP Method         : getUserById
Class Method        : com.mayikt.demo.TestController.getUserById
IP                  : 127.0.0.1
Requert params      : [{"address":"华东","age":18,"id":10010,"name":"贾强"}]
======================================方法:getUserById() 结束======================================
2023-04-02 14:21:29.171  INFO 5912 --- [nio-8080-exec-1] com.mayikt.demo.TestController           : /user/selectUserList params:User(id=10010, name=贾强, age=18, address=华东)

总结

使用上面这种方式,减轻了我们自己手动日志打印的繁琐,而且配置也相对于比较简单,如果有其他需求是比较频繁的操作的话,我们就可以使用AOP切面的方式来完成。

肥肠好用

http://www.hrbkazy.com/news/52032.html

相关文章:

  • 做个进出口英文网站多少钱潮州seo建站
  • 界首网站优化公司免费培训网站
  • 张家口市网站建设web网站设计
  • 旅游网站开发的意义相关资料黑科技引流推广神器免费
  • 青岛网站建设服务器淘宝站外引流推广方法
  • 网站建设学习内容cba排名最新排名
  • 怎么做网站静态布局免费快速网站
  • 政务服务网站建设运行情况优化网站推广
  • 有效的网站需要做到什么意思刷粉网站推广便宜
  • 2345浏览器影视大全win10必做的优化
  • 小说主角重生之后做网站seo精准培训课程
  • 个人网站趋向怎么办网站平台
  • 高端网站建设公司排行网站引流推广
  • 东莞企业网站电话个人网站建站流程
  • 阳江网站制作培训机构需要什么资质
  • java与php哪个做网站好外链互换平台
  • wordpress手机h5主题网络优化培训骗局
  • 昆明网站制作报价武汉seo排名优化
  • 北京专业网站建设网站推广宁波seo搜索排名优化
  • 娄底营销型网站建设今日新闻最新头条10条摘抄
  • 网站首页原型图咋做seo网站优化方法
  • 无锡上海网站建设yoast seo
  • 网吧设计装饰公司万词优化
  • 网站开发环境和运行环境百度极速版下载安装
  • 黃冈建设厅官方网站google搜索关键词热度
  • 教做宝宝衣服的网站seo实战培训
  • 比亚迪新能源汽车介绍seo推广专员
  • 网站建设发布教程怎么建立自己的网站平台
  • 网站做产品的审核工作宁德市住房和城乡建设局
  • 辽宁城市建设网站账号权重查询