Skip to content

Commit 0e0433a

Browse files
committed
feature(支持全局自定义比较器): 支持全局自定义比较器
1. 支持全局自定义比较器 2. 支持返回结果添加自定义数据 3. 自定义比较器设置移至JsonDiffConfig.getJsonNeatFactory()
1 parent 1c1763a commit 0e0433a

File tree

3 files changed

+46
-23
lines changed

3 files changed

+46
-23
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package me.codeleep.jsondiff.core.config;
2+
3+
import me.codeleep.jsondiff.core.utils.JsonNeatFactory;
4+
5+
/**
6+
* @author: codeleep
7+
* @createTime: 2023/04/16 13:33
8+
* @description: 全局配置
9+
*/
10+
public class JsonDiffConfig {
11+
12+
/**
13+
* 默认的比较器工厂
14+
*/
15+
private final static JsonNeatFactory jsonNeatFactory = new JsonNeatFactory();
16+
17+
public static JsonNeatFactory getJsonNeatFactory() {
18+
return jsonNeatFactory;
19+
}
20+
21+
}
22+

json-diff-core/src/main/java/me/codeleep/jsondiff/core/utils/JsonDiffUtil.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import me.codeleep.jsondiff.common.model.TravelPath;
88
import me.codeleep.jsondiff.common.model.neat.JsonNeat;
99
import me.codeleep.jsondiff.common.utils.RunTimeDataFactory;
10+
import me.codeleep.jsondiff.core.config.JsonDiffConfig;
1011
import me.codeleep.jsondiff.core.handle.array.AbstractArrayJsonNeat;
1112
import me.codeleep.jsondiff.core.handle.object.AbstractObjectJsonNeat;
1213
import me.codeleep.jsondiff.core.handle.primitive.AbstractPrimitiveJsonNeat;
@@ -25,17 +26,17 @@ public static JsonNeat getJsonNeat(Object expect, Object actual, TravelPath trav
2526
return null;
2627
}
2728
boolean defaultNeat = RunTimeDataFactory.getOptionInstance().isMandatoryDefaultNeat();
28-
Class<? extends JsonNeat> customComparator = JsonNeatFactory.getCustomComparator(travelPath.getAbstractTravelPath());
29+
Class<? extends JsonNeat> customComparator = JsonDiffConfig.getJsonNeatFactory().getCustomComparator(travelPath.getAbstractTravelPath());
2930
boolean custom = customComparator != null;
3031
// 返回系统默认处理器
3132
if (expect instanceof JSONObject && actual instanceof JSONObject) {
32-
return custom ? selectionCustomJsonNeat(customComparator, ComparatorEnum.OBJECT) : JsonNeatFactory.getObjectJsonNeatInstance(defaultNeat);
33+
return custom ? selectionCustomJsonNeat(customComparator, ComparatorEnum.OBJECT) : JsonDiffConfig.getJsonNeatFactory().getObjectJsonNeatInstance(defaultNeat);
3334
}
3435
if (expect instanceof JSONArray && actual instanceof JSONArray) {
35-
return custom ? selectionCustomJsonNeat(customComparator, ComparatorEnum.ARRAY) : JsonNeatFactory.getArrayJsonNeatInstance(defaultNeat);
36+
return custom ? selectionCustomJsonNeat(customComparator, ComparatorEnum.ARRAY) : JsonDiffConfig.getJsonNeatFactory().getArrayJsonNeatInstance(defaultNeat);
3637
}
3738
if (ClassUtil.isPrimitiveType(expect) && ClassUtil.isPrimitiveType(actual)) {
38-
return custom ? selectionCustomJsonNeat(customComparator, ComparatorEnum.PRIMITIVE) : JsonNeatFactory.getPrimitiveJsonNeatInstance(defaultNeat);
39+
return custom ? selectionCustomJsonNeat(customComparator, ComparatorEnum.PRIMITIVE) : JsonDiffConfig.getJsonNeatFactory().getPrimitiveJsonNeatInstance(defaultNeat);
3940
}
4041
return null;
4142
}

json-diff-core/src/main/java/me/codeleep/jsondiff/core/utils/JsonNeatFactory.java

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,78 +18,78 @@ public class JsonNeatFactory {
1818
/**
1919
* 对象默认比较器
2020
*/
21-
private static Class<? extends JsonNeat> objectJsonNeat = ComplexObjectJsonNeat.class;
21+
private Class<? extends JsonNeat> objectJsonNeat = ComplexObjectJsonNeat.class;
2222

2323
/**
2424
* 数组默认比较器
2525
*/
26-
private static Class<? extends JsonNeat> arrayJsonNeat = ComplexArrayJsonNeat.class;
26+
private Class<? extends JsonNeat> arrayJsonNeat = ComplexArrayJsonNeat.class;
2727

2828
/**
2929
* 基本类型默认比较器
3030
*/
31-
private static Class<? extends JsonNeat> primitiveJsonNeat = PrimitiveTypeJsonNeat.class;
31+
private Class<? extends JsonNeat> primitiveJsonNeat = PrimitiveTypeJsonNeat.class;
3232

3333
/**
3434
* 指定的path使用自定义比较器
3535
* key: 与ignorePath格式一致
3636
* value: 继承 AbstractArrayJsonNeat,AbstractObjectJsonNeat,AbstractPrimitiveJsonNeat. 并且实现对应格式接口的字节码
3737
*/
38-
private static final Map<String, Class<? extends JsonNeat>> customComparator = new HashMap<>();
38+
private final Map<String, Class<? extends JsonNeat>> customComparator = new HashMap<>();
3939

4040

4141

42-
public static Class<? extends JsonNeat> getObjectJsonNeat(boolean defaultNeat) {
42+
public Class<? extends JsonNeat> getObjectJsonNeat(boolean defaultNeat) {
4343
if (defaultNeat) {
4444
return ComplexObjectJsonNeat.class;
4545
}
4646
return objectJsonNeat;
4747
}
4848

49-
public static JsonNeat getObjectJsonNeatInstance(boolean defaultNeat) {
49+
public JsonNeat getObjectJsonNeatInstance(boolean defaultNeat) {
5050
return ClassUtil.getClassNameInstance(getObjectJsonNeat(defaultNeat));
5151
}
5252

53-
public static void setObjectJsonNeat(Class<? extends JsonNeat> objectJsonNeat) {
54-
JsonNeatFactory.objectJsonNeat = objectJsonNeat;
53+
public void setObjectJsonNeat(Class<? extends JsonNeat> objectJsonNeat) {
54+
this.objectJsonNeat = objectJsonNeat;
5555
}
5656

57-
public static Class<? extends JsonNeat> getArrayJsonNeat(boolean defaultNeat) {
57+
public Class<? extends JsonNeat> getArrayJsonNeat(boolean defaultNeat) {
5858
if (defaultNeat) {
5959
return ComplexArrayJsonNeat.class;
6060
}
6161
return arrayJsonNeat;
6262
}
6363

64-
public static JsonNeat getArrayJsonNeatInstance(boolean defaultNeat) {
64+
public JsonNeat getArrayJsonNeatInstance(boolean defaultNeat) {
6565
return ClassUtil.getClassNameInstance(getArrayJsonNeat(defaultNeat));
6666
}
6767

68-
public static void setArrayJsonNeat(Class<? extends JsonNeat> arrayJsonNeat) {
69-
JsonNeatFactory.arrayJsonNeat = arrayJsonNeat;
68+
public void setArrayJsonNeat(Class<? extends JsonNeat> arrayJsonNeat) {
69+
this.arrayJsonNeat = arrayJsonNeat;
7070
}
7171

72-
public static Class<? extends JsonNeat> getPrimitiveJsonNeat(boolean defaultNeat) {
72+
public Class<? extends JsonNeat> getPrimitiveJsonNeat(boolean defaultNeat) {
7373
if (defaultNeat) {
7474
return PrimitiveTypeJsonNeat.class;
7575
}
7676
return primitiveJsonNeat;
7777
}
7878

79-
public static JsonNeat getPrimitiveJsonNeatInstance(boolean defaultNeat) {
79+
public JsonNeat getPrimitiveJsonNeatInstance(boolean defaultNeat) {
8080
return ClassUtil.getClassNameInstance(getPrimitiveJsonNeat(defaultNeat));
8181
}
8282

83-
public static void setPrimitiveJsonNeat(Class<? extends JsonNeat> primitiveJsonNeat) {
84-
JsonNeatFactory.primitiveJsonNeat = primitiveJsonNeat;
83+
public void setPrimitiveJsonNeat(Class<? extends JsonNeat> primitiveJsonNeat) {
84+
this.primitiveJsonNeat = primitiveJsonNeat;
8585
}
8686

87-
public static Class<? extends JsonNeat> getCustomComparator(String path) {
87+
public Class<? extends JsonNeat> getCustomComparator(String path) {
8888
return customComparator.get(path);
8989
}
9090

91-
public static void addCustomComparator(String path, Class<? extends JsonNeat> customComparator) {
92-
JsonNeatFactory.customComparator.put(path, customComparator);
91+
public void addCustomComparator(String path, Class<? extends JsonNeat> customComparator) {
92+
this.customComparator.put(path, customComparator);
9393
}
9494

9595
}

0 commit comments

Comments
 (0)