springboot
文章平均质量分 76
FighterLiu
这个作者很懒,什么都没留下…
展开
-
Springboot参数校验@Validated和@Valid区别
@Validated和@Valid区别Springboot中参数的校验我们可以使用@Validated和@Valid两个注解,这两个注解有什么区别?那种情况下使用@Validated注解?那种情况下使用@Valid注解?我们先看看这两个注解的源码:Validated源码如下:@Target({ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER})@Retention(RetentionPolicy.RUNTIME)@D原创 2021-11-22 11:20:01 · 1989 阅读 · 0 评论 -
springboot中如何优雅的对接口数据进行加密解密
在系统开发的过程中我们经常需要对外提供相应的API接口,为了保证系统数据的安全性,我们常常需要对传输的数据进行对称的加密。防止数据在传输的过程中被抓包,造成信息的泄露。通常的做法是我们在每个接口方法的前面先对请求的数据进行解密,解密完成后处理相应的业务逻辑,然后在对返回数据进行加密。这样做的坏处是代码太过于冗余,每写一个接口都要处理加密和解密方法。有没有什么办法可以把加密和解密的逻辑提取出来,在接口的方法中我们只关注处理业务逻辑。答案肯定是有的,springboot中的RequestBodyAdvice 和原创 2021-11-08 15:37:47 · 4811 阅读 · 2 评论 -
SpringBoot集成Ldap
什么是Ldap轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP,/ˈɛldæp/)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。为什么需要Ldap这里举个例子,一个公司内部有很多系统,每个系统都有独立的用户名和密码。密码太多,有时候想不起来哪个密码对应的是哪个系统。后续如果又新增一个项目,还要在开发和维护一套用户和密码。如何才能系统整合,以此做到账号的打通,使多套系统共用一个用户名和原创 2021-11-01 11:50:50 · 8132 阅读 · 3 评论 -
redisTemplate.opsForValue()中方法讲解
查看源码可以看到redisTemplate.opsForValue()中的方法都定义在ValueOperations<K, V> 中,该接口中一共有17个方法:public interface ValueOperations<K, V> { void set(K key, V value); void set(K key, V value, long timeout, TimeUnit unit); Boolean setIfAbsent(K key, V value);原创 2021-10-27 14:58:39 · 33031 阅读 · 0 评论 -
Springboot中如何使用Redis
Redis是什么 Redis是一个开源的,高性能的,基于键值对的缓存与存储系统,通过提供多种建值数据类型来适应不同场景下的缓存与存储需求。Redis特性存储结构Redis支持的健值数据类型如下:字符串类型,散列类型,列表类型,集合类型,有序集合类型内存存储与持久化Redis数据库中所有的数据都存储在内存中。Redis提供了对持久化的支持,即可以将内存中的数据异步写入到磁盘中,同时不影响继续提供服务功能丰富Redis可以作为缓存,消息队列等简单稳定Redi...原创 2021-10-26 17:04:31 · 580 阅读 · 0 评论 -
springboot自定义参数校验规则
上一篇讲了Springboot中参数校验优雅实践,本篇讲解如果自定义参数校验规则。在日常开发中Bean Validation 中内置的注解已经可以满足我们大部分需求,但是在处理一些特殊的校验规则时需要我们自定义注解实现。下面以日期格式校验规则为例,如何在springboot 中自定义注解实现参数的校验:首先定义一个注解类:package com.validator.demo.api.valid;import java.lang.annotation.Documented;import jav原创 2021-05-26 11:26:03 · 1355 阅读 · 1 评论 -
Springboot中参数校验优雅实践
在提供对外的API接口的时候,我们经常需要对参数进行校验。通常的做法是在程序中通过if 进行判断,例如:package com.validator.demo.api.controller;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.a原创 2021-05-26 09:07:05 · 663 阅读 · 1 评论 -
解决spring 处理request.getInputStream()输入流只能读取一次问题
如果接口是用@RequestBody来接受数据,如果在拦截器中使用request.getInputStream() ,那么controller就无法拿到数据,会抛出错误:java.lang.IllegalStateException: getInputStream() has already been called for this request因为spring中request.getInputStream() 和request.getReader()只能被获取一次,而@RequestBody注解原创 2021-05-14 15:36:44 · 1000 阅读 · 1 评论 -
Spring框架中如何优雅统计程序的执行时间
在工作中经常有统计某个方法的执行时间,比如项目中我们写了一个AOP,在AOP中定义了环绕通知用于向日志中打印相应的参数及方法执行的时间 public Object around(ProceedingJoinPoint pjd) throws Throwable { log.info("环绕通知开始"); // 获取方法名 String className = pjd.getSignature().getClass().getName();原创 2021-05-14 14:37:42 · 5920 阅读 · 1 评论 -
springboot 定义统一返回结果
前后端分离项目中后端开发需要写相应的接口,定义统一的返回格式有利于提高开发效率和沟通的成本。通常返回的格式主要如下两种:##### 1. 只返回相应的状态,格式如下:```{ "code": "200", "msg": "SUCCESS"}```##### 2. 返回相应的状态及数据,格式如下:```{ "code": "200", "msg": "查询成功", "result": { "id": 10, ...原创 2020-09-03 16:32:15 · 6173 阅读 · 1 评论 -
springboot定义全局异常
本篇文章接着上一篇文章编写,上一篇参考springboot 定义统一返回结果如何在springboot中定义全局异常:首先在枚举类中添加全局异常代码package com.example.demo.base;/** * 响应码枚举 */public enum ResultCode { SUCCESS("200"), //成功 FAIL("400"), //失败 UNAUTHORIZED("401"), //未认证(签名错误) NOT_FOUND("原创 2020-09-04 09:51:58 · 603 阅读 · 0 评论