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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值