Skip to content

Commit e2d4c53

Browse files
committed
优化验证器
1 parent da14b20 commit e2d4c53

File tree

2 files changed

+36
-19
lines changed

2 files changed

+36
-19
lines changed

hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/validator/GroovyDycBeanValidator.java

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import org.apache.commons.beanutils.BeanUtils;
55
import org.hsweb.ezorm.core.Validator;
66
import org.hsweb.ezorm.rdb.exception.ValidationException;
7+
import org.hsweb.ezorm.rdb.meta.RDBColumnMetaData;
8+
import org.hsweb.ezorm.rdb.meta.RDBTableMetaData;
79
import org.hsweb.web.bean.validator.ValidateResults;
810
import org.hsweb.web.core.exception.BusinessException;
911
import org.springframework.util.ReflectionUtils;
@@ -26,13 +28,17 @@ public class GroovyDycBeanValidator implements Validator {
2628
private String className;
2729
private javax.validation.Validator hibernateValidator;
2830

31+
private RDBTableMetaData tableMetaData;
2932

30-
public GroovyDycBeanValidator(String className, javax.validation.Validator hibernateValidator) {
33+
34+
public GroovyDycBeanValidator(String className, RDBTableMetaData tableMetaData, javax.validation.Validator hibernateValidator) {
3135
this.className = className;
3236
this.hibernateValidator = hibernateValidator;
37+
this.tableMetaData = tableMetaData;
3338
}
3439

35-
public boolean validateMap(Map<Object, Object> data, Operation operation) {
40+
public boolean validateMap(Map<String, Object> data, Operation operation) {
41+
data = transformation(data);
3642
ValidateResults results = new ValidateResults();
3743
try {
3844
Class validatorTargetClass = (Class) engine.execute(className, new HashMap<>()).getIfSuccess();
@@ -41,16 +47,15 @@ public boolean validateMap(Map<Object, Object> data, Operation operation) {
4147
if (operation == Operation.INSERT) {
4248
data.forEach((key, value) -> {
4349
try {
44-
BeanUtils.setProperty(validatorTarget, (String) key, value);
50+
BeanUtils.setProperty(validatorTarget, key, value);
4551
} catch (Exception e) {
4652
}
4753
});
4854
result.addAll(hibernateValidator.validate(validatorTarget));
4955
} else
5056
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));
5459
});
5560
if (result.size() > 0) {
5661
for (ConstraintViolation<Object> violation : result) {
@@ -65,6 +70,17 @@ public boolean validateMap(Map<Object, Object> data, Operation operation) {
6570
return true;
6671
}
6772

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+
6884
@Override
6985
public boolean validate(Object data, Operation operation) throws ValidationException {
7086
if (data instanceof Map)
@@ -76,7 +92,7 @@ public boolean validate(Object data, Operation operation) throws ValidationExcep
7692
} else {
7793
BeanMap beanMap = new BeanMap();
7894
beanMap.setBean(data);
79-
validateMap(beanMap, operation);
95+
validateMap((Map) beanMap, operation);
8096
}
8197
return true;
8298
}

hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/validator/GroovyDycBeanValidatorFactory.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import org.hsweb.ezorm.core.Validator;
44
import org.hsweb.ezorm.core.ValidatorFactory;
5+
import org.hsweb.ezorm.core.meta.AbstractTableMetaData;
56
import org.hsweb.ezorm.core.meta.ColumnMetaData;
67
import org.hsweb.ezorm.core.meta.TableMetaData;
78
import org.hsweb.ezorm.core.param.Column;
@@ -38,17 +39,17 @@ public class GroovyDycBeanValidatorFactory implements ValidatorFactory {
3839
"import org.hsweb.web.bean.validator.constraints.*;"
3940
};
4041

41-
static {
42-
simpleType.put(Integer.class, "int");
43-
simpleType.put(Long.class, "long");
44-
simpleType.put(String.class, "String");
45-
simpleType.put(Double.class, "double");
46-
simpleType.put(Float.class, "float");
47-
simpleType.put(Boolean.class, "boolean");
48-
simpleType.put(Short.class, "short");
49-
simpleType.put(Byte.class, "byte");
50-
simpleType.put(Character.class, "char");
51-
}
42+
// static {
43+
// simpleType.put(Integer.class, "int");
44+
// simpleType.put(Long.class, "long");
45+
// simpleType.put(String.class, "String");
46+
// simpleType.put(Double.class, "double");
47+
// simpleType.put(Float.class, "float");
48+
// simpleType.put(Boolean.class, "boolean");
49+
// simpleType.put(Short.class, "short");
50+
// simpleType.put(Byte.class, "byte");
51+
// simpleType.put(Character.class, "char");
52+
// }
5253

5354
@Override
5455
public Validator createValidator(TableMetaData metaData) {
@@ -108,7 +109,7 @@ public Validator initValidator(TableMetaData metaData) {
108109
} catch (Exception e) {
109110
throw new BusinessException("创建动态表单验证器失败!", e, 500);
110111
}
111-
GroovyDycBeanValidator validator = new GroovyDycBeanValidator(className, hibernateValidator);
112+
GroovyDycBeanValidator validator = new GroovyDycBeanValidator(className, ((RDBTableMetaData) metaData), hibernateValidator);
112113
base.put(metaData.getName(), validator);
113114
return validator;
114115
}

0 commit comments

Comments
 (0)