企业家居网站建设,软文推广文章范文,wordpress调用用户自定义头像,常州今日头条新闻最近有个需求#xff0c;需要将页面的内容生成excel或者word文档#xff0c;而且每次的修改都需要生成新的版本#xff0c;同时需要记录每次修改变化的内容。我们会把每次的修改的内容提交赋值给一个java对象#xff0c;同时存储到数据库一条新数据#xff0c;对应数据表一… 最近有个需求需要将页面的内容生成excel或者word文档而且每次的修改都需要生成新的版本同时需要记录每次修改变化的内容。我们会把每次的修改的内容提交赋值给一个java对象同时存储到数据库一条新数据对应数据表一行数据记录。有个功能需要每次对比两个任意版本的数据前端传递两个不同的版本号参数和其他对应的文档id参数然后后端对应查出来这两行数据一种方法是将两条数据转换成json字符串返回给前端前端去对比两个字符串的不同的地方然后高亮对比展示在页面。其实也可以后端去作对比将变化的内容和两条数据一起返回这样前端你可以直接按照后端返回的对比内容去高亮显示两次修改的不同。 现在模拟这种情况比如是修改一个user的数据第一次创建时候是1.0.0版本然后又再次修改了一些字段的内容提交后形成一条新纪录版本1.0.1版本现在直接创建两个user对象就当是从数据库中根据一定条件加上版本号限制查出来的两条数据。 JaVers的官网https://javers.org/ 首先引入需要的基础Maven依赖
!-- 阿里JSON解析器 --dependencygroupIdcom.alibaba.fastjson2/groupIdartifactIdfastjson2/artifactIdversion2.0.43/version/dependencydependencygroupIdcom.google.guava/groupIdartifactIdguava/artifactIdversion31.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(123456789qq.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(123456789qq.com);user2.setPassword(dfjdgdg);user2.setVersion(1.0.1);Javers javers JaversBuilder.javers().build();Diff diff javers.compare(user1, user2);System.out.println(对比:diff);ListChange 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);ListDiffChange 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中央仓库中找到