当前位置: 首页 > news >正文

响应式网站模板 食品外贸营销信

响应式网站模板 食品,外贸营销信,杭州公司社保缴纳比例,建设摩托官方网站文章目录 一#xff1a; 使用场景二#xff1a; 定义FieldUniqueValid注解2.1 FieldUniqueValid2.2 注解说明2.3 Constraint 注解介绍2.4 FieldUniqueValid注解使用 三#xff1a;自定义FieldUniqueValidator校验类3.1 实现ConstraintValidator3.2 重写initialize方法3.3 重… 文章目录 一 使用场景二 定义FieldUniqueValid注解2.1 FieldUniqueValid2.2 注解说明2.3 Constraint 注解介绍2.4 FieldUniqueValid注解使用 三自定义FieldUniqueValidator校验类3.1 实现ConstraintValidator3.2 重写initialize方法3.3 重写isValid方法3.4 获取list集合重复数据的下标3.5 思路3.6 测试3.6.1 前端传递参数需要进行唯一性校验的字段3.6.2 message提示 一 使用场景 在开发过程中前端给后端传递集合并且需要保证集合的实体类中的某些字段必须是惟一的不能重复。 传递的集合 private ListUser userInfoList;集合对应的实体类 Data public class User {private int id;private String name;private String card;}如果我们要保证传递的name或者card必须是唯一的不能重复应该如何实现呢此时可以通过自定义注解的方式实现。 二 定义FieldUniqueValid注解 2.1 FieldUniqueValid /*** 该注解用于校验List集合实体类当中的某些字段的唯一性* p* 条件表达式支持使用$parent.获取父节点属性实体内不能使用除List集合外的其他集合类型例如Set等* ul* li标记在字段上用于指定单个或多个字段fields需填写/li* /ul* author ikun* date 2023.07.27*/ Documented Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) Constraint(validatedBy FieldUniqueValidator.class) public interface FieldUniqueValid {//需要进行唯一校验的字段String[] fieldsCode() default{};String[] fieldsName() default{};String message() default [fieldName]列[index]行数据重复;//不能有默认值报错contains Constraint annotation, but the groups parameter default value is not the empty arrayClass?[] groups() default {};//在那种组中使用Class? extends Payload[] payload() default {}; }2.2 注解说明 Documented Document 是 java 在生成文档是否显示注解的开关。 Target(ElementType.FIELD) ElementType.FIELD该注解只能声明在一个类的字段前。 2.3 Constraint 注解介绍 Constraint注解是Java Bean Validation框架中的一个注解用于自定义约束注解即自定义校验规则。 通过在自定义注解上添加Constraint注解可以将该注解标记为一个自定义约束注解。同时需要指定一个实现了ConstraintValidator接口的验证器类用于验证该注解所标记的字段或参数是否符合自定义的校验规则。 Constraint注解有以下属性 validatedBy用于指定实现了ConstraintValidator接口的验证器类。该属性的值是一个Class对象数组可以指定多个验证器类。 message用于指定当校验失败时所返回的错误信息。可以使用占位符{}在校验器中使用具体的参数替换。 groups用于指定分组即根据不同的分组应用不同的校验规则。 payload用于指定元数据即可以通过该属性传递一些额外的验证信息。 使用Constraint注解可以通过自定义注解的方式为字段或参数添加自定义的校验规则并实现校验逻辑。这样在进行参数校验时可以方便地通过注解的方式来调用自定义的校验规则。 2.4 FieldUniqueValid注解使用 FieldUniqueValid(fieldsCode {name,card}, fieldsName {姓名,身份证号}) private ListUser userInfoList;fieldsCode 需要校验的字段fieldsName 校验字段对应的名称 三自定义FieldUniqueValidator校验类 Slf4j public class FieldUniqueValidator implements ConstraintValidatorFieldUniqueValid, Iterable? {private String[] fieldsCode;private String[] fieldsName;/*** 数据有重复的字段名称*/private static final String FIELD_NAME [fieldName];/*** 相同元素下标集合*/private static final String INDEX [index];/*** 初始化参数* param constraintAnnotation 注解的值*/Overridepublic void initialize(FieldUniqueValid constraintAnnotation) {fieldsCode constraintAnnotation.fieldsCode();fieldsName constraintAnnotation.fieldsName();}Overridepublic boolean isValid(Iterable? value, ConstraintValidatorContext context) {//如果没有配置校验字段信息则直接通过if(fieldsCode.length 0 fieldsName.length 0){return true;}if(fieldsCode.length ! fieldsName.length){throw new RuntimeException(FieldUniqueValid注解所对应的fieldsCode和fieldsName无法相互映射);}if(value null){throw new RuntimeException(FieldUniqueValid注解所在的集合为空无法判断);}for (int i 0; i fieldsCode.length; i) {ListObject list new ArrayList();Iterator? iterator value.iterator();long index;for (index 0; iterator.hasNext(); index) {Object fieldValue null;try {//forceAccess true,属性是私有的需要设置为true打开权限fieldValue FieldUtils.readField(iterator.next(),fieldsCode[i],true);} catch (IllegalAccessException e) {log.error(fieldsName[i] 转化失败无法进行校验, e);}list.add(fieldValue);}//去重后的总数long count list.stream().distinct().count();//去重之前和去重以后进行比较if(count index){//返回重复元素下标集合String sameIndex getListSameIndex(list);String defaultConstraintViolation context.getDefaultConstraintMessageTemplate();context.disableDefaultConstraintViolation();String convertedConstraintViolation defaultConstraintViolation.replace(FIELD_NAME, fieldsName[i]).replace(INDEX, sameIndex);context.buildConstraintViolationWithTemplate(convertedConstraintViolation).addConstraintViolation();return false;}}return true;}} 3.1 实现ConstraintValidator ConstraintValidatorFieldUniqueValid, Iterable? FieldUniqueValid需要校验的注解就是我们自定义的Iterable?前端传递list的类型此时用Iterable是因为数据支持list和set集合 3.2 重写initialize方法 可以从onstraintAnnotation参数中获取fieldsCode、fieldsName里面的参数。主要作用就是将注解的参数进行初始化 3.3 重写isValid方法 Iterable? value, ConstraintValidatorContext context value可以获取到传递的集合数据context获取注解上的message信息 3.4 获取list集合重复数据的下标 /*** 集合【List】找出list中重复元素的下标显示下标所在位置* param list*/public static String getListSameIndex(List? list){ListObject same new ArrayList();List? collect list.stream().distinct().collect(Collectors.toList());if(collect.size() list.size()){return null;}StringBuilder sb new StringBuilder();for (int i 0; i collect.size(); i) {for (int j 0; j list.size(); j) {if (list.get(j).equals(collect.get(i))){same.add(j1);}}if (same.size() 1){sb.append(same).append(、);}same.clear();}return sb.substring(0, sb.toString().lastIndexOf(、));}3.5 思路 首先获取到集合的数据然后通过反射用循环遍历获取到name字段的list数据然后去重。将去重前后的list进行比较。如果长度变化了则说明有重复数据。此时返回false。然后我们我们通过getListSameIndex方法获取到list重复数据的下标然后替换[index]。 3.6 测试 3.6.1 前端传递参数需要进行唯一性校验的字段 3.6.2 message提示
http://www.w-s-a.com/news/205396/

相关文章:

  • 个股期权系统网站开发小清新wordpress模板
  • 全中文网站开发建筑公司企业愿景文案
  • 广州网站建设正规公司建设银行信用卡中心网站
  • 哪个网站是专门做封面素材怎么制作app平台
  • 网站开发 平均工资商标注册在哪个部门申请
  • 做外贸需要自己的网站吗营销型网站建设市场分析
  • 绍兴网站制作推广wordpress 无法自动升级
  • 阿里云建站数据库用什么app制作开发费用多少
  • 中国住房和城乡建设部网站资质查询中小开网站
  • 交易所网站开发水果营销软文
  • 石家庄有什么好玩的地方2017织梦网站怎么做seo
  • wordpress项目插件seo的含义
  • 网站平台建设的作用电影宣传类网页界面设计
  • 户外网站模板国外优秀的平面设计网站
  • 家政网站怎么做网站机房建设方案
  • 学校网站建设运行情况2022年近期舆情热点话题
  • 做淘宝需要知道什么网站吗有没有做软件的网站
  • 安丘网站建设制作做网站和微信小程序
  • 京东网站的建设与发展前景黑龙江建设网官网登陆
  • soho的网站怎么做微网站平台建设方案
  • 网站开发下载阿里云oss做视频网站
  • 东莞营销网站制作做一个网站建设
  • 啥网站都能看的浏览器下载网站后台管理系统展望
  • 新建站点步骤汉中 wordpress联盟
  • 坪山网站设计的公司网站 seo 设置
  • 济南网站设计公司排名如何免费注册网站域名
  • 网站开发分工甜妹妹福利wordpress
  • 网站中英文要怎么做网站建设的策划文案
  • 合肥推广外包公司佛山seo
  • 成都网站品牌设计策划课堂网站开发