4
4
import org .apache .commons .beanutils .BeanUtils ;
5
5
import org .hsweb .ezorm .core .Validator ;
6
6
import org .hsweb .ezorm .rdb .exception .ValidationException ;
7
+ import org .hsweb .ezorm .rdb .meta .RDBColumnMetaData ;
8
+ import org .hsweb .ezorm .rdb .meta .RDBTableMetaData ;
7
9
import org .hsweb .web .bean .validator .ValidateResults ;
8
10
import org .hsweb .web .core .exception .BusinessException ;
9
11
import org .springframework .util .ReflectionUtils ;
@@ -26,13 +28,17 @@ public class GroovyDycBeanValidator implements Validator {
26
28
private String className ;
27
29
private javax .validation .Validator hibernateValidator ;
28
30
31
+ private RDBTableMetaData tableMetaData ;
29
32
30
- public GroovyDycBeanValidator (String className , javax .validation .Validator hibernateValidator ) {
33
+
34
+ public GroovyDycBeanValidator (String className , RDBTableMetaData tableMetaData , javax .validation .Validator hibernateValidator ) {
31
35
this .className = className ;
32
36
this .hibernateValidator = hibernateValidator ;
37
+ this .tableMetaData = tableMetaData ;
33
38
}
34
39
35
- public boolean validateMap (Map <Object , Object > data , Operation operation ) {
40
+ public boolean validateMap (Map <String , Object > data , Operation operation ) {
41
+ data = transformation (data );
36
42
ValidateResults results = new ValidateResults ();
37
43
try {
38
44
Class validatorTargetClass = (Class ) engine .execute (className , new HashMap <>()).getIfSuccess ();
@@ -41,16 +47,15 @@ public boolean validateMap(Map<Object, Object> data, Operation operation) {
41
47
if (operation == Operation .INSERT ) {
42
48
data .forEach ((key , value ) -> {
43
49
try {
44
- BeanUtils .setProperty (validatorTarget , ( String ) key , value );
50
+ BeanUtils .setProperty (validatorTarget , key , value );
45
51
} catch (Exception e ) {
46
52
}
47
53
});
48
54
result .addAll (hibernateValidator .validate (validatorTarget ));
49
55
} else
50
56
data .forEach ((key , value ) -> {
51
- Field field = ReflectionUtils .findField (validatorTargetClass , (String ) key );
52
- if (field != null )
53
- result .addAll (hibernateValidator .validateValue (validatorTargetClass , (String ) key , value ));
57
+ if (tableMetaData .getColumn (key ) != null )
58
+ result .addAll (hibernateValidator .validateValue (validatorTargetClass , key , value ));
54
59
});
55
60
if (result .size () > 0 ) {
56
61
for (ConstraintViolation <Object > violation : result ) {
@@ -65,6 +70,17 @@ public boolean validateMap(Map<Object, Object> data, Operation operation) {
65
70
return true ;
66
71
}
67
72
73
+ private Map <String , Object > transformation (Map <String , Object > map ) {
74
+ Map <String , Object > newData = new HashMap <>(map );
75
+ for (Map .Entry <String , Object > entry : map .entrySet ()) {
76
+ RDBColumnMetaData column = tableMetaData .findColumn (entry .getKey ());
77
+ if (column != null ) {
78
+ entry .setValue (column .getValueConverter ().getData (entry .getValue ()));
79
+ }
80
+ }
81
+ return newData ;
82
+ }
83
+
68
84
@ Override
69
85
public boolean validate (Object data , Operation operation ) throws ValidationException {
70
86
if (data instanceof Map )
@@ -76,7 +92,7 @@ public boolean validate(Object data, Operation operation) throws ValidationExcep
76
92
} else {
77
93
BeanMap beanMap = new BeanMap ();
78
94
beanMap .setBean (data );
79
- validateMap (beanMap , operation );
95
+ validateMap (( Map ) beanMap , operation );
80
96
}
81
97
return true ;
82
98
}
0 commit comments