package com.cloudpense.util;
import org.springframework.util.CollectionUtils;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.groups.Default;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/*
*@description: 使用com.alibaba.fastjson.annotation.JSONField注解用来定位某个数据,然后@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)来指定不需要序列化的字段
*import com.alibaba.fastjson.annotation.JSONField;
*import com.fasterxml.jackson.annotation.JsonProperty;
*import lombok.AllArgsConstructor;
*import lombok.Data;
*import lombok.NoArgsConstructor;
*
*import javax.validation.constraints.NotBlank;
*import javax.validation.constraints.NotNull;
- 比如:
- @Data
*@AllArgsConstructor
*@NoArgsConstructor
*public class User{ - private Integer id;
- @NotBlank(message = “不能为空”)
- @JSONField(ordinal = 3)
- private String phone;
- @NotNull
- @JSONField(ordinal = 1)
- private String username;
- @JSONField(ordinal = 2)
- private Integer age;
- @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
- private String email;
*}
*
*
*
*@author:kevin
*@Date: 2019-10-31
*/
public class ValidationUtils {
private static Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
private static String ERROR_OBJ = “obj:”;
public static <T> Map<String, Object> getValidation(T obj) {
if(!(obj instanceof List)) {
return validateObj(obj);
}else if(obj instanceof List){
List objList = (List) obj;
Map<String, Object> result = null;
for (int i = 0; i < objList.size(); i++) {
Map<String, Object> objectMap = validateObj(objList.get(i));
if (objectMap != null){
if(result == null){
result = new LinkedHashMap<>();
}
result.put("第"+(i+1)+"个数据校验失败",objectMap);
}
}
return result;
}
return null;
}
private static <T> Map<String,Object> validateObj(T obj){
Map<String, Object> errorMap = null;
Set<ConstraintViolation<T>> set = validator.validate(obj, Default.class);
if (!CollectionUtils.isEmpty(set)) {
errorMap = new LinkedHashMap<String, Object>();
String property = null;
for (ConstraintViolation<T> cv : set) {
//这里循环获取错误信息,可以自定义格式
property = cv.getPropertyPath().toString();
String message = cv.getMessage();
errorMap.put(property, message);
}
errorMap.put(ERROR_OBJ,obj);
}
return errorMap;
}
}