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

Java审计对比工具JaVers使用

        最近有个需求,需要将页面的内容生成excel或者word文档,而且每次的修改都需要生成新的版本,同时需要记录每次修改变化的内容。我们会把每次的修改的内容提交赋值给一个java对象,同时存储到数据库一条新数据,对应数据表一行数据记录。有个功能需要每次对比两个任意版本的数据,前端传递两个不同的版本号参数和其他对应的文档id参数,然后后端对应查出来这两行数据,一种方法是,将两条数据,转换成json字符串返回给前端,前端去对比两个字符串的不同的地方,然后高亮对比展示在页面。其实也可以后端去作对比,将变化的内容和两条数据一起返回,这样前端你可以直接按照后端返回的对比内容,去高亮显示两次修改的不同。

           现在模拟这种情况,比如是修改一个user的数据,第一次创建时候是1.0.0版本,然后又再次修改了一些字段的内容,提交后,形成一条新纪录,版本1.0.1版本,现在直接创建两个user对象,就当是从数据库中根据一定条件加上版本号限制查出来的两条数据。

         JaVers的官网:https://javers.org/

         首先,引入需要的基础Maven依赖:

<!-- 阿里JSON解析器 --><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.43</version></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>31.1-jre</version></dependency>

然后写个测试方法,模拟这种场景

import com.alibaba.fastjson2.JSONArray;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.javers.core.Javers;
import org.javers.core.JaversBuilder;
import org.javers.core.diff.Change;
import org.javers.core.diff.Diff;import java.util.List;/*** @author xiaomifeng1010* @version 1.0* @date: 2024-10-24 17:04* @Description*/
public class DiffCompareTest {public static void main(String[] args) {
//        模拟从数据库中查出来了两条数据User user1 = new User();user1.setName("张三");user1.setAge(18);user1.setAddress("北京");user1.setPhone("123456789");user1.setEmail("123456789@qq.com");user1.setPassword("123456789");user1.setVersion("1.0.0");User user2 = new User();user2.setName("李四");user2.setAge(18);user2.setAddress("广州");user2.setPhone("123456789");user2.setEmail("123456789@qq.com");user2.setPassword("dfjdgdg");user2.setVersion("1.0.1");Javers javers = JaversBuilder.javers().build();Diff diff = javers.compare(user1, user2);System.out.println("对比:"+diff);List<Change> changes = diff.getChanges();System.out.println("变化:"+changes);//        转换成json数组字符串StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("[");for (Change change : changes) {String valueChange = change.toString().replace("ValueChange", "");stringBuilder.append(valueChange);System.out.println("每一项的变化:"+change);}stringBuilder.append("]");String jsonArrayStr = stringBuilder.toString();
//        打印转换之后的json数组字符串System.out.println("json数组:"+jsonArrayStr);
//        或者赋值给一个java对象if (StringUtils.isNotBlank(jsonArrayStr)) {JSONArray jsonArray = JSONArray.parseArray(jsonArrayStr);List<DiffChange> diffChanges = jsonArray.toJavaList(DiffChange.class);System.out.println("转换后的对象:"+diffChanges);}}
}@Data
class User {private String name;private Integer age;private String address;private String phone;private String email;private String password;private String version;}@Data
class DiffChange{private String property;private String left;private String right;
}

 在实际项目中,数据中是从数据中查询出来的,同时也是通过controller中的接口返回给前端的json数据,根据情况,组合java对象,返回给前端就可以了。

这个示例的运行输出内容如下:

非常好用,而且这个javers开源框架还有对应的各种数据库的审计工具;可以在Maven中央仓库中找到:

 

http://www.lryc.cn/news/474366.html

相关文章:

  • unity中预制体的移动-旋转-放缩
  • 【压力测试】如何确定系统最大并发用户数?
  • ubuntu常用基本指令简记
  • 【解决方案】用git reset --hard重置了提交但是发现reset了一些本不该reset的内容,是不是寄了?
  • ACM模式下Java读取控制台输入注意事项及输出规范化
  • 面试题整理 2
  • 华为自研仓颉编程语言官网上线 首个公测版本开放下载
  • NVR监测软件/设备EasyNVR多品牌NVR管理工具/设备对城市安全有哪些具体益处?
  • MFC工控项目实例二十八模拟量信号每秒采集100次
  • 安装scrcpy-client模块av模块异常,环境问题解决方案
  • 硅谷甄选(11)角色管理
  • C语言结构体 变量对齐原理
  • 【oracle】正则表达式
  • 如何找到网上爆款内容,快速复制扩大品牌声量
  • 补齐:相交链表:扣160
  • Java项目实战II基于Java+Spring Boot+MySQL的智能推荐的卫生健康系统(开发文档+数据库+源码)
  • NET Core的AOP实施方法1 DispatchProxy
  • AIGC生成式人工智能——泼天的富贵(三)
  • GetX的一些高级API
  • 【笔面试常见题:三门问题】用条件概率、全概率和贝叶斯推导
  • 刘艳兵-DBA011-应用使用Oracle数据库,必须启动哪些服务?
  • 注释多行代码的vim插件
  • Docker 安装HomeAssistant智能家居系统
  • 21 Docker容器集群网络架构:四、Docker集群网络验证
  • 【Kaggle | Pandas】练习5:数据类型和缺失值
  • 《YOLO 目标检测》—— YOLO v4 详细介绍
  • Ubuntu:通过ssh链接另外一台Ubuntu
  • 黄山谷捷提交创业板IPO注册,募资扩产提升综合竞争力
  • (python)如何进行加密
  • 夸克网盘免费扩容 20T 福利,无限次叠加,亲测有效