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

中元建设网站永久免费云服务器推荐

中元建设网站,永久免费云服务器推荐,网站后台编辑技巧,浙江职业能力建设网站在日常开发中经常会用到String类型的数据当作数值进行映射,势必会做出数值范围的校验,可以通过自定义注解的办法简化代码实现,减少冗余代码。 Target({ElementType.FIELD}) Retention(RetentionPolicy.RUNTIME) Constraint(validatedBy St…

在日常开发中经常会用到String类型的数据当作数值进行映射,势必会做出数值范围的校验,可以通过自定义注解的办法简化代码实现,减少冗余代码。 

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = StrRangeValidator.class)
public @interface StrRange {/*** 错误提示* @return*/String message() default "value is not in given range";/*** 最小值* @return*/double min() default Double.MIN_VALUE;/*** 最大值* @return*/double max() default Double.MAX_VALUE;/*** 是否包含边界* @return*/boolean closeMin() default true;/*** 是否包含边界* @return*/boolean closeMax() default true;/*** 是否可空* @return*/boolean nullable() default true;Class<?>[] groups() default { };Class<? extends Payload>[] payload() default { };
}

这里的groups,payload是必须的。其他方法是根据需要设定的参数:

1. 允许null值跳过校验

2. 边界值开区间、闭区间

3. 自定义errorMessage

validatedBy 是核心的验证逻辑:

public class StrRangeValidator implements ConstraintValidator<StrRange, String> {private boolean nullable;private BigDecimal min;private BigDecimal max;private boolean closeMin;private boolean closeMax;@Overridepublic void initialize(StrRange constraintAnnotation) {nullable = constraintAnnotation.nullable();min = new BigDecimal(String.valueOf(constraintAnnotation.min()));max = new BigDecimal(String.valueOf(constraintAnnotation.max()));closeMin = constraintAnnotation.closeMin();closeMax = constraintAnnotation.closeMax();}@Overridepublic boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {if (s == null && nullable){return true;}try {BigDecimal val = new BigDecimal(s);boolean checkMin = closeMin ? min.compareTo(val) <= 0 : min.compareTo(val) < 0;boolean checkMax = closeMax ? val.compareTo(max) <= 0 : val.compareTo(max) < 0;return checkMin && checkMax;} catch (Exception ex) {return false;}}
}

String到枚举值的反向解析和验证也是比较常见的问题,也可以通过自定义注解的方式简化此类解析判断。

再来一个枚举验证:

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = ValidEnumValidator.class)
public @interface ValidEnum {/*** 错误提示* @return*/String message() default "invalid enum value";/*** 目标类型* @return*/Class<?> target();/*** 是否可空* @return*/boolean nullable() default true;Class<?>[] groups() default { };Class<? extends Payload>[] payload() default { };
}
public class ValidEnumValidator implements ConstraintValidator<ValidEnum, String> {private Class<?> clazz;private boolean nullable;@Overridepublic void initialize(ValidEnum constraintAnnotation) {nullable = constraintAnnotation.nullable();clazz = constraintAnnotation.target();}@Overridepublic boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {if (!clazz.isEnum()) {return false;}if (s == null && nullable) {return true;}try {Method method = clazz.getDeclaredMethod("of", String.class);return method.invoke(null, s) != null;} catch (Exception e) {return false;}}
}

注意,枚举需要保持类型一致:String,都存在这样的of方法

@AllArgsConstructor
@Getter
public enum EAccountAuthTypeEnum {OPEN_ACCOUNT("1", "开户"),;private final String code;private final String msg;public static EAccountAuthTypeEnum of(String code) {return Arrays.stream(values()).filter(ele -> ele.getCode().equals(code)).findFirst().orElse(null);}
}

http://www.yayakq.cn/news/507024/

相关文章:

  • 国外英语写作网站百度图片识别搜索
  • 做网站用什么主题网站建设郑州公司
  • 企业免费招聘人才网站把网站传到服务器上怎么做
  • 婚恋网站女孩子都是做美容学校网站建设市场
  • 南通城乡住房建设厅网站百度上怎么发布作品
  • 张家港网站建设早晨设计wordpress用途
  • 查建设标准网站wordpress 值得买主题
  • 诸暨营销型网站设计设计关于北京的网页
  • 南宁seo网站建设费用个人网站备案拍照
  • 镇江专业网站制作公司wordpress 虎嗅主题
  • 建站的方式有哪些网站 wordpress 公众号
  • 网站开发有什么语言wordpress 注册功能
  • 做翻译 网站吗深圳网站seo关键词
  • 做移动网站点击软件吗查询单位信息的网站
  • 单页网站建设一般收费wordpress 升级php
  • 房产交易网站开发wordpress怎么恢复自带主题
  • 公司刚做网站在那里找图片做零食店网站构建策划报告
  • 建立自己的网站可以采用的方式有网站开发团队需要哪些
  • 网站合作建设方案网站做闪电电磁
  • 下载图片的网站建设免费代理浏览网页
  • 成都网站建设方案服务筑云电商网站建设公司
  • 微商货源网站大全做最好的导航网站
  • 潮动九州网站建设上海互联网推广找哪家
  • wordpress无插件实现网站地图广州市安全教育平台app下载
  • 连云港网站建设哪家好企业微信网站怎么建设
  • 商城站到汤泉池网站建设所面临的问题
  • 长沙网站建设论坛太原头条新闻
  • 手机网站架构统一门户网站
  • h5网站设计室内设计师找图片的网站
  • 四川建设厅电话网站金融网站cms