前言 我黄汉三又回来了,快半年没更新博客了,这半年来的经历实属不易,疫情当头,本人实习的公司没有跟员工共患难, 直接辞掉了很多人.作为一个实习生,本人也被无情开除了.所以本人又得重新准备找工作了. 算了,感慨一下,本来想昨天发的,但昨天是清明,哀悼时期,就留到了今天发. 话不多说,直接进入正题吧.这段时间本人在写毕设,学校也迟迟没有开学的消息,属实难顶. 本来被开了本人只想回学校安度"晚年"算了,毕竟工作可以再找,但亲朋好友以后毕业了可能就很少见了. 所以亲们,一定要珍惜身边的人噢.…
0.需求 在实际的开发过程中,服务间调用一般使用Json传参的模式,SpringBoot项目无法使用@RequestParam接收Json传参 只有@RequestBody支持Json,但是每次为了一个接口就封装一次实体类比较麻烦 如果使用Map来进行参数接收,则会导致参数不可控,会在接口中新增较多判断进行入参控制 其次,在实际的开发过程中,我们偶尔会传入两个实体类,如果使用@RequestBody也会出错 因为传入的参数只能够读取一次,一般这里也会封装一次实体类,不够方便 也有重写HttpSe…
前言   项目中经常会出现重复提交的问题,而接口幂等性也一直以来是做任何项目都要关注的疑难点,网上可以查到非常多的方案,我归纳了几点如下:   1).数据库层面,对责任字段设置唯一索引,这是最直接有效的方式,不好的地方就是一旦触发就会在服务端抛数据库相关异常:   2).代码层面,增加业务逻辑判断,先查询一遍若没有才插入,这也是最容易想到的方式,反正写上就对了,不好的地方就是分布式场景下依然避免不了问题:   3).前端层面,对于触发事件的操作比如按钮等,最好点击过后都设置几秒的置灰时间,能很大…
版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 一:功能简介 本文主要记录如何使用aop切面的方式来实现日志记录功能. 主要记录的信息有: 操作人,方法名,参数,运行时间,操作类型(增删改查),详细描述,返回值. 二:项目结构图 三:代码实现 1.配置文件 这里只有两个配置:1)server.port=11000,设置项目启动的端口号,防止被其他服务占用;2)spring.aop.auto=true,开启spring的aop配置,简单明了,不需要多配置其他的配置或注解.app…
https://www.cnblogs.com/wenjunwei/p/9639909.html https://blog.csdn.net/tyrant_800/article/details/78751870 一:功能简介 本文主要记录如何使用aop切面的方式来实现日志记录功能. 主要记录的信息有: 操作人,方法名,参数,运行时间,操作类型(增删改查),详细描述,返回值. 二:项目结构图 三:代码实现 1.配置文件 这里只有两个配置:1)server.port=11000,设置项目启动的端口…
新建注解: /** * 想要权限拦截的接口就加上这个注解 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface EnableAuth { } 编写实现 ApplicationContextAware 的类: Spring容器已启动就执行 setApplicationContext 方法 /** * 项目一启动,就调用这个方法获取所有需要权限拦截的接口,放到c…
最近开发了一个功能,需要发送短信验证码鉴权,考虑到短信服务需要收费,因此对此接口做了防刷处理,实现方式主要是Redis+自定义注解(需要导入Redis的相关依赖,完成Redis的相关配置,gs代码,这里不做展示). 首先定义注解AccessFrequencyLimiter,注解包含四个参数,限制一段时间内同一IP地址最多访问接口次数,以及报错信息和报错之后再次可以访问接口的时间间隔. @Target(ElementType.METHOD) @Retention(RetentionPolicy.R…
优点: 未使用if else,就算以后增加支付类型,也不用改动之前代码 只需要新写一个支付类,给添加自定义注解@Pay 首先: 定义自定义注解 Pay 定义 CMBPay ICBCPay 两种支付 根据注解中的value 标识是哪种支付(1为CMBPay  2为ICBCPay) 两种支付都需继承InitNewService.java 避免注入对象报错 package com.huarui.inter; import java.math.BigDecimal; /** * 支付需实现该接口 * 接…
枚举类: /** * Created by tzq on 2018/5/21. */ public enum MyAnnoEnum { SELECT("select","查询"), INSERT("insert","添加"), UPDATE("update","修改"), DELECT("delect","删除"); private MyAnnoE…
一.移入依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> &…