- 浏览: 498637 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (502)
- Java (70)
- Linux (10)
- 数据库 (38)
- 网络 (10)
- WEB (13)
- JSP (4)
- 互联网 (71)
- JavaScript (30)
- Spring MVC (19)
- HTML (13)
- CSS (3)
- AngularJS (18)
- Redis (5)
- Bootstrap CSS (1)
- ZooKeeper (4)
- kafka (6)
- 服务器缓存 (4)
- Storm (1)
- MongoDB (9)
- Spring boot (16)
- log4j (2)
- maven (3)
- nginx (5)
- Tomcat (2)
- Eclipse (4)
- Swagger (2)
- Netty (5)
- Dubbo (1)
- Docker (7)
- Hadoop (12)
- OAuth (1)
- webSocket (4)
- 服务器性能 (7)
- Session共享 (1)
- tieye修改 (1)
- 工作 (1)
- 有用的语录 (0)
- https (2)
- common (5)
- 产品开发管理 (1)
- CDN 工作原理 (1)
- APNS、GCM (1)
- 架构图 (3)
- 功能实现分析 (1)
- JMX (1)
- 服务器相关操作命令 (1)
- img02 (0)
- 服务器环境搭建 (9)
- goodMenuBook (1)
- CEInstantPot (0)
- 有用数据 (1)
- 百度地图WEB API (2)
- 正则表达式 (1)
- 样式例子 (2)
- staticRecipePressureCooker.zip (1)
- jCanvas (1)
- 网站攻击方法原理 (1)
- 架构设计 (3)
- 物联网相关 (3)
- 研发管理 (7)
- 技术需求点 (1)
- 计划 (1)
- spring cloud (11)
- 服务器开发的一些实用工具和方法 (1)
- 每天学到的技术点 (4)
- Guava (1)
- ERP 技术注意要点 (2)
- 微信小程序 (1)
- FineRepor (1)
- 收藏夹 (1)
- temp (5)
- 服务架构 (4)
- 任职资格方案 (0)
- osno_test (1)
- jquery相关 (3)
- mybatis (4)
- ueditor (1)
- VueJS (7)
- python (10)
- Spring EL (1)
- shiro (1)
- 前端开发原理与使用 (7)
- YARN (1)
- Spark (1)
- Hbase (2)
- Pig (2)
- 机器学习 (30)
- matplotlib (1)
- OpenCV (17)
- Hystrix (1)
- 公司 (1)
- miniui (4)
- 前端功能实现 (3)
- 前端插件 (1)
- 钉钉开发 (2)
- Jenkins (1)
- elasticSearch使用 (2)
- 技术规范 (4)
- 技术实现原理 (0)
最新评论
自定义注解检测数据有效性
参考原文:http://blog.csdn.net/maguanghui_2012/article/details/69372209
package com.midea.common; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface ModelFieldValidity { long max() default Long.MAX_VALUE; long min() default Long.MIN_VALUE; long maxLen() default Long.MAX_VALUE; long minLen() default Long.MIN_VALUE; boolean enableNull() default false; }
package com.midea.common.Model; import com.midea.common.ModelFieldValidity; public class DescriptionModel { @ModelFieldValidity(max = 15, min = 0) private int age; @ModelFieldValidity(max = 15, min = 0, enableNull = true) private Integer high; @ModelFieldValidity(maxLen = 8, minLen = 1, enableNull = true) private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getHigh() { return high; } public void setHigh(int high) { this.high = high; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "DescriptionModel [age=" + age + ", high=" + high + ", name=" + name + "]"; } }
package com.midea.common; import java.lang.reflect.Field; public class ModelFieldValidityUtils { /** * @param t * @return 校验通过返回null,校验失败返回失败原因 */ public static <T> String checkModelFields(T t) { String result = null; Field[] fields = t.getClass().getDeclaredFields(); for (Field field : fields) { ModelFieldValidity modelFieldValidity = field.getAnnotation(ModelFieldValidity.class); if (null == modelFieldValidity) { continue; } try { field.setAccessible(true); Object object = field.get(t); // 判断是否可以为空 if (null == object) { boolean enableNull = modelFieldValidity.enableNull(); // System.out.println("enableNull == " + enableNull); if (!enableNull) { result = field.getName() + " is null"; return result; } else { continue; } } if (object instanceof Number) { // Number比较 Long max = modelFieldValidity.max(); Long min = modelFieldValidity.min(); // System.out.println("max == " + max); // System.out.println("min == " + min); // System.out.println("Number == " + object); int check = ModelFieldValidityUtils.check(max, min, (Number) object); if (check == 1) { result = field.getName() + " = " + object + " > max(" + max + ")"; return result; } else if (check == -1) { result = field.getName() + " = " + object + " < min(" + min + ")"; return result; } else { continue; } } else if (object instanceof String) { // String比较 Long maxLen = modelFieldValidity.maxLen(); Long minLen = modelFieldValidity.minLen(); // System.out.println("maxLen == " + maxLen); // System.out.println("minLen == " + minLen); // System.out.println("String == " + object); int check = ModelFieldValidityUtils.check(maxLen, minLen, ((String) object).length()); if (check == 1) { result = field.getName() + " Len = " + ((String) object).length() + " > maxLen(" + maxLen + ")"; return result; } else if (check == -1) { result = field.getName() + " Len = " + ((String) object).length() + " < minLen(" + minLen + ")"; return result; } else { continue; } } } catch (IllegalArgumentException e1) { // TODO Auto-generated catch block e1.printStackTrace(); result = e1.getMessage(); return result; } catch (IllegalAccessException e1) { // TODO Auto-generated catch block e1.printStackTrace(); result = e1.getMessage(); return result; } } return result; } private static <T extends Number> int check(T max, T min, T object) { if (object.doubleValue() > max.doubleValue()) { return 1; } if (object.doubleValue() < min.doubleValue()) { return -1; } return 0; } }
package com.midea.common; import java.lang.reflect.Field; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.midea.common.Model.DescriptionModel; public class ModelFieldValidityUtilsTest { final static Logger logger = LogManager.getLogger(ModelFieldValidityUtilsTest.class); public static void main(String[] args) { DescriptionModel descriptionModel = new DescriptionModel(); descriptionModel.setAge(1); descriptionModel.setHigh(1); descriptionModel.setName("asa"); System.out.println("descriptionModel == " + descriptionModel.toString()); // String result = null; String result = ModelFieldValidityUtils.checkModelFields(descriptionModel); System.out.println("result == " + result); } }
参考原文:http://blog.csdn.net/maguanghui_2012/article/details/69372209
发表评论
-
选举算法
2022-06-17 08:48 435选举算法 常用的选举 ... -
elasticSearch使用
2022-04-27 08:42 421ElasticSearch 基于Apache Lucene构建 ... -
IDEA 快捷键
2022-03-02 16:55 249大小写转换快捷键 ctr+shift+u IDEA ... -
每天学到的技术点3
2022-02-21 20:01 2501.TEXT与BLOB的区别,二者 ... -
zookeeper dubbo 安装
2021-12-04 19:27 323docker-machine ssh default d ... -
将博客搬至CSDN
2021-11-18 19:57 195将博客搬至CSDN -
docker mysql 主从安装
2021-11-10 16:55 240docker run -d -p 13306:3306 --n ... -
rocketmq安装部署.txt
2021-11-07 19:10 220docker search rocketmq docke ... -
JVM 调优与测试
2021-05-22 22:24 585VisualVM 能够监控线程,内存情况,查看方法的CPU ... -
百度人脸识别
2021-05-21 16:11 366package com.gaojinsoft.htwy.y20 ... -
springboot tomcat 参数配置与数据库连接池多少的性能分析
2021-05-12 22:15 565参数配置与数据库连接池多少的性能分析 tomcat线程数 ... -
springBoot tomcat配置参数说明
2021-05-12 09:13 3029#最大连接数 server.tomcat.max-connec ... -
技术选型
2021-01-29 17:34 2971.移动端组件vux,vant,vant好点,文档好的,基于v ... -
方便开发调试和问题跟踪
2021-01-01 10:17 2511.外网最好可以连接数据库 2.关键信息可以在接口返回信息, ... -
log4j2应用
2020-07-23 14:16 367https://blog.csdn.net/giventian ... -
文件上传下载
2020-07-06 13:16 4241.文件ID,名字(源,目标),大小,路径(/aa/bb/s. ... -
Jenkins脚本
2020-03-12 17:55 447#!/bin/bash -ilx echo "开始 ... -
base64与file 相互转换
2019-10-23 18:19 783base64与file 相互转换 import org. ... -
百度身份证识别
2019-10-18 18:19 693package com.gaojinsoft.htwy.y20 ... -
钉钉开发
2019-09-17 20:16 438钉钉开发 开发者帐号 1357047443 x***310* ...
相关推荐
自定义注解通常结合注解处理器(如Java的APT或Kotlin的KSP)一起使用,以便在编译期间生成额外的代码或执行特定的验证。 例如,创建一个自定义注解`@MyAnnotation`,可以这样定义: ```java @Retention...
当检测到方法上有特定的事务注解(比如自定义的`@ReadTransaction`和`@WriteTransaction`)时,拦截器会根据注解来选择使用读库还是写库。这通常涉及到数据源的切换,SpringBoot中可以使用AbstractRoutingDataSource...
Java注解(Annotation)是自Java 5.0版本引入的一种元数据,它允许程序员在...通过自定义注解,开发者可以创建自己的元数据,以适应特定项目的需求和工作流程。在实际开发中,合理利用注解可以提高代码质量和开发效率。
- 它可以集成 SQL 日志、连接有效性检测、SQL 执行统计等功能,有助于数据库性能优化和运维。 4. **Redis**: - Redis 是一个高性能的键值对内存数据库,常用于缓存和消息中间件。 - SpringBoot 中可以通过 `...
下面将详细讨论Java注解的基本概念、用途以及如何创建自定义注解。 1. 什么是注解 注解是一种在Java源代码中添加的特殊声明,它不改变程序的基本结构和行为,而是为编译器、IDE、构建工具或其他工具提供元信息。...
在Java编程中,Annotation(注解)是一种强大的元数据机制,它允许程序员在代码中嵌入额外的信息,这些信息可以在编译时或运行时被编译器或虚拟机...通过自定义注解和处理器,开发者可以构建出适应特定需求的解决方案。
首先,我们需要创建自定义注解,例如`@UnitAdaptive`,用于标记那些需要进行单位转换的方法或字段。这个注解可以包含一个或多个参数,如默认单位、允许的单位类型等。例如: ```java @Retention(RetentionPolicy....
- **连接检测与回收**:连接池定期检查连接状态,对过期或异常的连接进行回收,保证连接的有效性。 - **关闭连接池**:应用关闭时,正确关闭连接池,释放所有资源。 4. **最佳实践**: - **选择合适的连接池实现...
综上,通过自定义注解和拦截器,结合适当的缓存机制,可以有效地防止Java API接口的重复提交,从而保障系统的稳定性和数据的准确性。在实际项目中,还需要根据具体需求和系统架构进行相应的调整和优化。
在本项目中,开发者可以自定义注解来标记那些潜在的“危险”代码,比如`@PotentiallyHarmful`或`@NeedsReview`,并在IDE中配置相应的警告提示。 插件的工作原理可能包括扫描源代码,查找特定注解,并与IDE的警告...
总之,通过 Spring Boot、MyBatis 和 Atomikos 的结合,我们可以有效地管理分布式环境中的多数据源事务,确保系统的稳定性和数据的一致性。在实际开发中,理解并熟练掌握这些技术的整合和配置是至关重要的。
- **自定义RedisCacheManager**:通过`@Autowired`注入`RedisCacheManager`并重置默认过期时间,例如设置为100秒,以确保缓存的有效管理。 2. **初始化Redis缓存** Spring Boot通过`RedisCacheManager`来管理缓存...
### 使用Apache POI获取...这种方法不仅可以帮助开发者更方便地处理Excel数据,还可以提高程序的健壮性和数据的准确性。在实际应用中,还需要根据具体需求调整代码逻辑,比如增加异常处理机制、优化性能等方面的工作。
test-on-borrow: true # 借出连接时检测是否有效 test-on-return: true # 归还连接时检测是否有效 validation-query: SELECT 1 FROM DUAL # 验证查询语句 web-stat-filter: # Web监控统计过滤器 enabled: true ...
数据标注是机器学习和人工智能领域中的关键步骤,它涉及到对大量数据进行人工注解,以训练模型理解并学习特定任务。在这个过程中,选择合适的工具至关重要,因为它直接影响到标注的效率和准确性。标题提到的“用于...
在Java编程中,对象属性值的校验是一个重要的实践环节,它确保了程序的数据完整性,防止因非法数据导致的运行时错误。这篇文章将探讨如何在Java中进行对象属性值的校验,以及相关的工具和源码分析。 首先,对象属性...
标题中的“spring注入web端校验类”指的是在Spring框架中,如何将验证逻辑整合到Web应用程序中,以便对用户输入的数据进行有效性检查。在Web应用中,数据验证是至关重要的,可以防止非法数据进入系统,确保数据的...
总结来说,使用Spring的自定义注释可以有效地整理和标准化代码,提高代码的可读性和可维护性。无论是组合已有的注解,还是封装常用的属性注入,或是简化测试配置,自定义注释都是一个非常实用的工具。在实际开发中,...
`valuelike:示例注释处理器` 提供了一个关于如何创建自定义注解处理器的示例。这个项目可能不是一个实际用于生产环境的实现,但它对于学习和理解注解处理器的工作原理非常有帮助。 首先,让我们了解一下注解处理器...
- XML Schema用于定义XML文档的结构和约束,确保数据的有效性。 13. **HTTP协议**: - 讲解了HTTP协议的定义、工作原理、请求和响应细节。 - 不同版本的HTTP协议(如HTTP 1.0和HTTP 1.1)的区别。 - Servlet...