spring boot指定字段解析顺序和忽略字段的和校验器

mac2024-04-04  33

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; }

}

最新回复(0)