博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义注解使用
阅读量:5049 次
发布时间:2019-06-12

本文共 3895 字,大约阅读时间需要 12 分钟。

1.自定义注解

@Documented@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public @interface FieldConstraints {    /**     * 字段长度判断.     * @return 返回限制长度.     */    int limitLen() default 50;    /**     * 是否必填判断.     * @return 限制是否为空.     */    boolean isNotBlank() default false;    /**     * 是否必填判断.     * @return 限制是否为空.     */    boolean isNotNull() default false;    /**     * @return     */    /* 规则校验类. */    Class ruleValidate() default NoSuchValidateRule.class;}

2.引入自定义注解

@Setter@Getter@ToStringpublic class RuleVo {    /**     * 调用测系统来源.     */    @FieldConstraints(limitLen = 50,isNotBlank = true,ruleValidate = IdSoaValidateRule.class)    private String systemId;    /**     * 调用方     */    @FieldConstraints(limitLen = 50,isNotBlank = true)    private String appKey;    /**     * 调用方     */    @FieldConstraints(limitLen = 50,isNotBlank = true, ruleValidate = CorValidateRule.class )    private String pin;    @FieldConstraints(limitLen = 5000,isNotBlank = true)    private String mobile;    @FieldConstraints(limitLen = 20,isNotBlank = true, ruleValidate = kuValidateRule.class)    private String sku;    /**     * 用户的ip地址.     */    @FieldConstraints(limitLen = 30,isNotBlank = true)    private String userIp;}

3.传入对象根据注解校验

public 
void validateFieldInfo(T t) throws ParamErrorException { if (null == t) { throw new ParamErrorException("校验参数(validateFieldInfo)参数为空."); } Field[] fields = t.getClass().getDeclaredFields(); if (null == fields) { log.error("校验参数(validateFieldInfo)请求实体参数为空."); throw new ParamErrorException("校验参数(validateFieldInfo)请求实体参数为空."); } for (Field field : fields) { field.setAccessible(true); try { boolean ruleFlag = field.isAnnotationPresent(FieldConstraints.class); if (ruleFlag) { FieldConstraints fieldRule = field.getAnnotation(FieldConstraints.class); //本来是注解必填才可以处理下边的规则,但是有些情况是可以不填,但是填了必须填正确.// if (!fieldRule.isBlank()) {// continue;// } // 如果类型是String 如果type是类类型,则前面包含"class ",后面跟类名 if (field.getGenericType().toString().equals("class java.lang.String")) { fetchStringField(field, fieldRule, t); } else {
log.warn("入参属性值" + field.getName() + "未被处理."); } }else{ log.debug("入参属性值" + field.getName() + "未被处理."); } } catch (Exception ex) { log.error("处理入参属性为:{}异常!{}", new Object[]{field.getName(), ex.getMessage()}); throw new ParamErrorException("入参属性值" + field.getName() + "校验异常."+ex.getMessage(), ex); } } }

 

private 
void fetchStringField(Field field, FieldConstraints fieldRule, T t) throws Exception { String value = (String) field.get(t); if (fieldRule.isNotBlank() && StringUtil.isBlank(value)) { throw new ParamErrorException("入参属性值" + field.getName() + "不能为空."); } if (fieldRule.isNotNull() && null == value) { throw new ParamErrorException("入参属性值" + field.getName() + "不能为空."); } if ((fieldRule.isNotBlank() || fieldRule.isNotNull()) && value.length() > fieldRule.limitLen()) { throw new ParamErrorException("入参属性值" + field.getName() + "长度超限.value:" + value); } if (fieldRule.ruleValidate().getName().endsWith(NoSuchValidateRule.class.getName())) { return; } ValidateRule validateRule = (ValidateRule) SpringContextHolder.getBean(fieldRule.ruleValidate()); validateRule.validateTByRule(value); }

 

转载于:https://www.cnblogs.com/PengChengLi/p/11052715.html

你可能感兴趣的文章
Django 内建 中间件组件
查看>>
bootstrap-Table服务端分页,获取到的数据怎么再页面的表格里显示
查看>>
进程间通信系列 之 socket套接字及其实例
查看>>
天气预报插件
查看>>
Unity 游戏框架搭建 (十三) 无需继承的单例的模板
查看>>
模块与包
查看>>
mysql忘记root密码
查看>>
apache服务器中设置目录不可访问
查看>>
嵌入式Linux驱动学习之路(十)字符设备驱动-my_led
查看>>
【NOIP模拟】密码
查看>>
java容器---------手工实现Linkedlist 链表
查看>>
three.js 性能优化的几种方法
查看>>
《梦断代码》读书笔记(三)
查看>>
FreeMarker解析json数据
查看>>
Java8 Lambda表达应用 -- 单线程游戏server+异步数据库操作
查看>>
次序+“选择不重复的记录”(3)——最大记录
查看>>
Codeforces 450 C. Jzzhu and Chocolate
查看>>
[Unity3D]Unity3D游戏开发MatchTarget的作用攀登效果实现
查看>>
ACdream 1115 Salmon And Cat (找规律&&打表)
查看>>
JSON、JSONP、Ajax的区别
查看>>