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

使用aop实现自定义注解

先发效果图

image

拿到对应的字段

image

 pom依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>order-service</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version><skipTests>true</skipTests></properties><!-- 继承 Spring Boot 父 POM,管理 Spring Boot 依赖版本 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version><relativePath/> <!-- 从仓库查找父 POM --></parent><dependencies><!-- Spring Boot 核心依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!--tomcat容器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--lombok依赖--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.26</version></dependency><!--springboot整合aop--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><!--添加fastjson依赖--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.1.0</version><configuration><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!--热部署配置--><configuration><!--fork:如果没有该项配置,整个devtools不会起作用--><fork>true</fork></configuration></plugin></plugins><finalName>video</finalName></build></project>

  配置文件

server.port=20013

  代码部分

import java.lang.annotation.*;@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface GetPostParams {String value() default "";
}package com.order.video.config;import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;/*** @Description:* @Author: tutu-qiuxie* @Create: 2026/2/26 15:35*/
@Aspect
@Component
@Slf4j
public class PostParamAspect {@Around("@annotation(getPostParams)")public Object around(ProceedingJoinPoint joinPoint, GetPostParams getPostParams) throws Throwable {Object[] args = joinPoint.getArgs();if (args.length > 0 && args[0] != null) {BeanWrapper wrapper = new BeanWrapperImpl(args[0]);if (wrapper.isReadableProperty("id")) {Object id = wrapper.getPropertyValue("id");log.info("id = {}", id);}}return joinPoint.proceed();}
}

  实体类

import lombok.Data;/*** @Description:* @Author: tutu-qiuxie* @Create: 2026/2/26 15:50*/
@Data
public class UserDTO {private Long id;private Integer age;private String name;
}

  接口

import com.order.UserDTO;
import com.order.video.config.GetPostParams;
import org.springframework.web.bind.annotation.*;/*** @Description:* @Author: tutu-qiuxie* @Create: 2026/2/26 15:34*/
@RestController
@RequestMapping("/test")
public class TestController {@PostMapping("/save")@GetPostParamspublic String save(@RequestBody UserDTO userDTO) {return "ok";}
}

  启动类

package com.order;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @Description:* @Author: tutu-qiuxie* @Create: 2025/12/29 21:45*/
@SpringBootApplication
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class,args);}}

  请求参数

127.0.0.1:20013/test/save{"id": 1,"age": 20
}

  以上的实现主要借助了aop的原理

 

http://www.jsqmd.com/news/415052/

相关文章:

  • 关系数据库替换用金仓:数据迁移中的完整性与一致性风险深度解析
  • 2026年2月真空波纹管厂商推荐,排名居前的值得关注,真空波纹管/波纹金属软管/波纹补偿器,真空波纹管厂商推荐 - 品牌推荐师
  • GEO(生成式引擎优化)实战指南:在AI搜索时代重塑品牌影响力
  • 国产化工业数据库推荐榜单:用科技力量守护国家工业数字化根基 - 速递信息
  • 2026年如何挑选驻车空调品牌排行榜上的顶尖产品? - 睿易优选
  • 2026年样板间厂家权威推荐榜:网红集装箱售楼处、集装箱样板间、临时售楼处、临时样板间、创意集装箱售楼处选择指南 - 优质品牌商家
  • DETR中的损失计算
  • 2026国内食堂承包公司哪家好TOP8|实力口碑实测榜单 - 企业推荐师
  • 2026年徐州办公设备租赁企业最新推荐榜:徐州租复印机、徐州租打印机、徐州会展复印机出租、徐州彩色复印机、徐州彩色打印机、聚焦服务品质与租赁方案竞争力深度剖析 - 海棠依旧大
  • EOM的逻辑构架(BIS 业务信息系统和MIS管理信息系统)(之四)--SMP(软件制作平台)语言基础知识之六十八
  • 2026年评价高的成都抚养权分割律师事务所公司推荐:成都法律辩护律师事务所咨询/成都经济律师事务所/选择指南 - 优质品牌商家
  • 【已解决】艾尔登法环提示d3dcompiler_47.dll丢失怎么办? - PC修复电脑医生
  • 2026年二手服务器与电子产品回收服务商推荐:至诚电脑/八方园通全解析 - 品牌推荐官
  • 西安直饮水机厂家怎么选?靠谱供应商推荐+专业科普 - 小坤哥
  • 武汉净水器服务商怎么选?专业科普+5家靠谱供应商推荐 - 小坤哥
  • 杨宝峰/梁海海团队发现RNA结合蛋白RBMS1的缺失可改善心力衰竭
  • 2026年国内靠谱的投影机出租品牌排名,8K投影机/30000流明投影机/6000流明投影机,投影机出租销售厂家哪家好 - 品牌推荐师
  • 2026年售楼处展厅厂家推荐:可定制的售楼处、可拆卸售楼处、可移动售楼处、可移动样板间、模块化样板间选择指南 - 优质品牌商家
  • 上古开源资源下载网站gforge.osdn.net.cn已彻底无法访问 —— 彻底关闭,消失了
  • 2026五大劳务派遣公司推荐,助力国企+实习生派遣需求 - 包罗万闻
  • 2026年全自动纸袋设备厂家推荐:纸袋机器、全自动纸袋机、卷筒纸袋机、圆绳内折纸袋机、尖底纸袋机、手提纸袋设备选择指南 - 优质品牌商家
  • 西安直饮水机一站式服务:详解服务内涵+靠谱供应商推荐 - 小坤哥
  • LLM+DevOps双驱联动:TestNG AI价值评分插件重构用例维护范式
  • 热销榜单:2026年二次元测量仪品牌推荐,提升测量精度的最佳选择 - 睿易优选
  • MATLAB运动估计基本算法详解
  • Pa11y自动化合规测试:WCAG 3.0时代的高效引擎
  • 涂装工艺:从经验依赖到数据驱动的系统性跃迁
  • 环保部门推荐!高口碑空气质量监测系统生产厂家TOP5名单发布 - 品牌推荐大师
  • 一文看懂蓝牙网关:主控芯片如何选型
  • 资源工具:Keda的自动扩缩容测试验证器