spring boot指定字段解析順序和忽略字段的和校驗器

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

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章