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

做网站销售话术阳泉住房和城乡建设厅网站

做网站销售话术,阳泉住房和城乡建设厅网站,wordpress音乐批量上传,百度seo刷排名网址缘由 在后台写接口的时候,经常会出现dto某个属性是映射到一个枚举的情况。有时候还会出现只能映射到枚举类中部分枚举值的情况。以前都是在service里面自行判断,很多地方代码冗余,所以就想着弄一个自定义的validation注解来实现。 例如下面某…

缘由

在后台写接口的时候,经常会出现dto某个属性是映射到一个枚举的情况。有时候还会出现只能映射到枚举类中部分枚举值的情况。以前都是在service里面自行判断,很多地方代码冗余,所以就想着弄一个自定义的validation注解来实现。
例如下面某个DTO的属性transmissionType,需要映射到TransmissionType枚举类

/*** @see TransmissionType#getCode()*/
private Integer transmissionType;

代码

新建一个接口

新建这个接口是为了后面获取枚举的code值,大部分时候,枚举的code都是int类型的,所以这里也只考虑了这种情况。如果是其他类型的,需要自行改造一下。比如另外建一个类型的接口,在EnumCodeValidator类里面判断处理。不想再建接口的话,就在此接口里面加一个返回code类型的方法。然后根据类型来决定是调用getCode获取值还是getCodeStr获取。

/*** 公共的接口,用于在validator里面获取枚举的code值,这里只考虑int类型的。*/
public interface EnumCode {int getCode();
}

新建一个注解

这个注解除了指定枚举类之外,还可以指定要包含或排除的枚举名称(是名称,在ConstraintValidator是通过枚举name方法拿名称的)

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** 验证枚举值注解<br>* 枚举的code需要是int类型*/
@Constraint(validatedBy = EnumCodeValidator.class)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidEnumCode {/*** 对应的枚举类的Class*/Class<? extends Enum<?>> enumClass();/*** 过滤的枚举名称 表示需要哪些名称的*/String[] filterEnumName() default {};/*** 排除的名称名称*/String[] excludeEnumName() default {};String message() default "值必须是已存在的枚举值";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};
}

自定义验证器,实现ConstraintValidator接口

import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;/*** 具体的校验规则*/
public class EnumCodeValidator implements ConstraintValidator<ValidEnumCode, Integer> {private Class<? extends Enum<?>> enumClass;private String[] filter;private String[] exclude;@Overridepublic void initialize(ValidEnumCode constraintAnnotation) {this.enumClass = constraintAnnotation.enumClass();this.filter = constraintAnnotation.filterEnumName();this.exclude = constraintAnnotation.excludeEnumName();}@Overridepublic boolean isValid(Integer value, ConstraintValidatorContext context) {if (value == null) {return true;}Enum<?>[] enums = enumClass.getEnumConstants();boolean filterEmpty = ArrayUtil.isEmpty(filter);boolean excludeNonEmpty = ArrayUtil.isNotEmpty(exclude);List<Integer> validCodes = Arrays.stream(enums).filter(e -> {if (excludeNonEmpty) {for (String excludeName : exclude) {if (StrUtil.equals(excludeName, e.name())) {return false;}}}if (filterEmpty) {return true;}for (String filterName : filter) {if (StrUtil.equals(filterName, e.name())) {return true;}}return false;}).mapToInt(e -> ((EnumCode) e).getCode()).boxed().collect(Collectors.toList());return validCodes.contains(value);}
}

使用

枚举类先implements EnumCode接口
在这里插入图片描述

常见的三种情况

  1. 必须是TransmissionType枚举类中的属性值
     /*** @see TransmissionType#getCode()*/@ValidEnumCode(enumClass = TransmissionType.class)private Integer transmissionType;
    
  2. 必须是TransmissionType枚举类中的属性值,且名称为STRATEGYNEWS
     public R<List<LinkVO>> newArticle(@RequestParam("articleType")@ValidEnumCode(enumClass = ArticleType.class,filterEnumName = {"STRATEGY", "NEWS"}) Integer articleType) {
    
  3. 必须是TransmissionType枚举类中的属性值,且排除掉名称为STRATEGYNEWS
     public R<ArticlesVO> getInfoByArticleType(@RequestParam("articleType")@ValidEnumCode(enumClass = ArticleType.class,excludeEnumName = {"STRATEGY", "NEWS"}) Integer articleType) {
    

文章转载自:

http://vGIQ9zse.dpnhs.cn
http://OTWAj4ar.dpnhs.cn
http://GZ5b5PGX.dpnhs.cn
http://KJm6EbZ1.dpnhs.cn
http://Q6Q1VV09.dpnhs.cn
http://OOCH9vJp.dpnhs.cn
http://zrM0ywTz.dpnhs.cn
http://hz1qcFEf.dpnhs.cn
http://ggsZuEWc.dpnhs.cn
http://VC6ZJvgt.dpnhs.cn
http://1gjZJT8c.dpnhs.cn
http://1v5haVDv.dpnhs.cn
http://61ffeU7B.dpnhs.cn
http://NUVIHsgg.dpnhs.cn
http://03TaL7Oh.dpnhs.cn
http://h0zqxZvO.dpnhs.cn
http://Bl4G6BtQ.dpnhs.cn
http://CpmqFvga.dpnhs.cn
http://aU4xZpxg.dpnhs.cn
http://24nOLxEP.dpnhs.cn
http://MVw5oStX.dpnhs.cn
http://FTT94Xym.dpnhs.cn
http://NDxtvEGk.dpnhs.cn
http://IXvlOWmy.dpnhs.cn
http://e9SHumyB.dpnhs.cn
http://kLvUK8V0.dpnhs.cn
http://kZkOQ7wg.dpnhs.cn
http://w7YZDUwf.dpnhs.cn
http://tdDlIJbn.dpnhs.cn
http://KZzbrkSQ.dpnhs.cn
http://www.dtcms.com/wzjs/690056.html

相关文章:

  • 国内网站开发的主流技术专网建设是什么
  • 做编程的+网站有哪些内容装饰公司如何拉客户
  • 旅游目的地网站建设的流程正规品牌网站设计地址
  • 网站建设开源代码网络营销推广方法包括哪些
  • 哪个网站做简历免费下载入侵wordpress
  • 杭州网站现场备案新闻株洲最新
  • 机票旅游网站开发网站建设学多长时间
  • 莱州市招聘网站建设黑彩网站
  • 沈阳专业做网站公司拉人头最暴利的app
  • 口碑营销网站iis下安装wordpress
  • 内蒙古城乡建设厅网站资质公告百度验证文件放在wordpress根目录
  • 湛江搜索引擎网站推广网站项目建设方案文档
  • 网站建设的工资商务网站建设理论依据
  • 搭建电商网站wordpress主题静态页面
  • 网站建设地域名如何给wordpress添加关键词描述
  • 上海网站建设 亿速专注手机网站建设
  • 福州最好的网站设计服务公司设计好用的网站
  • 北京开发网站威海网站开发公司电话
  • 网站特殊字体封面型网页网站有哪些内容
  • 网站群 seowordpress 会员付费
  • 开发网站需要怎么做北京做网站的公司哪家好
  • vs做网站怎么做窗体工程建设交易信息网
  • 南阳网站推广方案企业网站建设的总体目标
  • 有哪些网站建设企业做单抗药的看什么网站好
  • 如何优化网站营销网站建设的公司
  • 做HH网站站长工具查询视频
  • 在线解压网站织梦网站备案
  • 做网站百灵鸟深圳网站建设ln12345
  • cdn网站加速吴桥钢结构网架公司
  • 新手学做网站 iso ed2k湖南邵阳网