自定义注解使用案例,

 后续会加上详细注释,或者出一个贴图详细的2.0版本,大家不要错过!我会详细教大家如何使用自定义注解开发!让你的代码瞬间高大上起来

@Data
public class ReportDateDTO {/*** 年*/@ApiModelProperty(value = "年", notes = "")@ReportFiled(value = "year", description = "date", font = FONT_MS_YH, fontsize = 13.5f)private String year;/*** 月*/@ApiModelProperty(value = "月", notes = "")@ReportFiled(value = "month", description = "date", font = FONT_MS_YH, fontsize = 13.5f)private String month;/*** 日*/@ApiModelProperty(value = "日", notes = "")@ReportFiled(value = "day", description = "date", font = FONT_MS_YH, fontsize = 13.5f)private String day;@ReportList("report_")private List<ForecastDataDTO> forecastDataDTOList;
}

 

/*** @author:Ttc* @date 2024/1/22  14:36* @description: 导出大屏预报数据VO*/
@Data
public class ForecastDataDTO {/*** 日期*/@ApiModelProperty(value = "日期", notes = "")@ReportFiled(value = "date")private String formattedDate;/*** 天气*/@ApiModelProperty(value = "天气", notes = "")@ReportFiled(value = "weather")private String weaDay;/*** 大屏显示风力等级*/@ApiModelProperty(value = "大屏显示风力等级", notes = "")@ReportFiled(value = "wind")private String largeScreenWind;/*** 最高温度*/@ApiModelProperty(value = "最高温度", notes = "")@ReportFiled(value = "tem_max")private String tem1;/*** 最低温度*/@ApiModelProperty(value = "最低温度", notes = "")@ReportFiled(value = "tem_min")private String tem2;
}

 

 

/*** @author:Ttc* @date 2024/1/18  17:54* @description: 报告字段*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ReportFiled {String value() default "";float fontsize() default 12.0f;/*** 字体路径* 如果为空,使用默认字体* @return*/String font() default "";String prefix() default "";String description() default "";
}

 

/*** @author:Ttc* @date 2024/1/23  14:48* @description: pdf*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ReportList {/*** 报表集合名称* 作为其中元素的前缀* @return*/String value() default "";
}
public Map<String, PdfFiledDto> getParamMap(Object param, String prefix, int index) {Map<String, PdfFiledDto> map = new HashMap<>(16);if (param == null) {return map;}Field[] fields = param.getClass().getDeclaredFields();for (Field field : fields) {Object formVal = ReflectUtil.getFieldValue(param, field.getName());ReportFiled reportFiled = field.getAnnotation(ReportFiled.class);if (reportFiled != null) {fillParamMapByReportFiled(map, formVal, reportFiled, prefix, index);}ReportList reportList = field.getAnnotation(ReportList.class);if (reportList != null) {String formKeyPrefix = reportList.value();if (formVal instanceof List) {List<Object> formObjList = (List<Object>) formVal;for (int i = 0; i < formObjList.size(); i++) {Object subObj = formObjList.get(i);Map<String, PdfFiledDto> subMap = getParamMap(subObj, formKeyPrefix, i + 1);map.putAll(subMap);}}}}return map;
}

 

private static void fillParamMapByReportFiled(Map<String, PdfFiledDto> map,Object formVal, ReportFiled reportFiled, String prefix, int index) {String formKey = reportFiled.value();if (StrUtil.isNotBlank(prefix)) {// 获取实际keyformKey = handleFormKey(prefix, index, formKey);}if (formVal == null) {map.put(formKey, getPdfFiledDto("", -1.0f));return;}fillParamMapByObject(map, reportFiled, formKey, formVal, index);
}

 

  private static void fillParamMapByReportFiled(Map<String, PdfFiledDto> map,
                                                   Object formVal, ReportFiled reportFiled, String prefix, int index) {
        String formKey = reportFiled.value();
        if (StrUtil.isNotBlank(prefix)) {
            // 获取实际key
            formKey = handleFormKey(prefix, index, formKey);
        }
        if (formVal == null) {
            map.put(formKey, getPdfFiledDto("", -1.0f));
            return;
        }
        if (formVal.getClass().isArray()) {
            Object[] arr = (Object[]) formVal;
            for (int i = 0; i < arr.length; i++) {
                Object item = arr[i];
                fillParamMapByObject(map, reportFiled, handleFormKey(formKey, i, ""), item);
            }
            return;
        }
        fillParamMapByObject(map, reportFiled, formKey, formVal);
    }

这里list集合,单独处理,加上文本域对应序号。 

private static String handleFormKey(String prefix, int index, String formKey) {prefix = prefix.endsWith(StrPool.UNDERLINE) ? prefix : prefix + StrPool.UNDERLINE;return StrUtil.isBlank(formKey) ?prefix + index: prefix + formKey + StrPool.UNDERLINE + index;
}

 

 

private static PdfFiledDto getPdfFiledDto(String val, float fontsize) {return new PdfFiledDto(val, fontsize, null);
}private static PdfFiledDto getPdfFiledDto(String val, float fontsize, String fontPath) {return new PdfFiledDto(val, fontsize, fontPath);
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/644338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ -- 入门(引用)

1.引用 1.1引用的概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。 比如&#xff1a;李逵&#xff0c;在家称为"铁牛"&#xff0c;江湖上人称&q…

CC工具箱使用指南:【平差工具】

一、简介 平差是一个摘自英文单词“adiustment”的中文翻译&#xff0c;它最初源于土地测量工程&#xff0c;并在后来广泛应用于各个测量领域在传统的测量中&#xff0c;由于各种误差的存在&#xff0c;例如仪器、人为、大地形态等因素&#xff0c;所得到的测量结果是不完全准…

MySQL基础(一)

学习数据库的目的&#xff1a; 实现数据持久化到本地。使用完整的管理系统统一管理&#xff0c;可以实现结构化查询&#xff0c;方便管理。 一、数据库概述 数据库&#xff08;DataBase&#xff09; 为了方便数据的存储和管理&#xff0c;它将数据按照特定的 规则存储在磁盘…

项目解决方案: 视频融合(实时监控视频和三维建模进行融合)设计方案

目 录 一、需求描述 1、视频接入和控制要求 2、视频播放需求 3、提供其他应用的调用 二、方案设计 &#xff08;一&#xff09;系统设计图 &#xff08;二&#xff09;产品实现方案 三、产品和功能描述 &#xff08;一&#xff09;总体描述 &#xf…

Java 数据结构集合

文章目录 Java 数据结构1. 基本数据结构1.1 数组 (Array)1.2 链表 (Linked List)1.3 栈 (Stack)1.4 队列 (Queue)双向队列优先级队列 2. 树形数据结构2.1 二叉树 (Binary Tree)2.2 堆 (Heap) 3. 散列数据结构3.1 哈希表 (Hash Map)3.2 LinkedHashMap3.3 TreeMapConcurrentHashM…

【C++练级之路】【Lv.7】【STL】vector类的模拟实现

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《C语言》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、成员变量二、默认成员函数2.1 constructor2.2 destructor2.3 copy constructor2.4 operator 三、迭代器…

Java毕业设计-基于jsp+servlet的学生推荐平台管理系统-第81期

获取源码资料&#xff0c;请移步从戎源码网&#xff1a;从戎源码网_专业的计算机毕业设计网站 项目介绍 基于jspservlet的学生推荐平台管理系统&#xff1a;前端 jsp、jquery&#xff0c;后端 servlet、jdbc&#xff0c;集成用户端和管理后台&#xff0c;用户端浏览书籍课程&…

C++ 字符串库 std::basic_string

std::basic_string C 字符串库 std::basic_string 在标头 定义 template<class CharT,class Traits std::char_traits<CharT>,class Allocator std::allocator<CharT> > class basic_string;(1) namespace pmr { template<class CharT,class Traits …

【运维】如何恢复默认的~/.bashrc

可以通过使用系统默认的.bashrc文件来恢复它。以下是一些步骤&#xff0c;具体操作可能因系统而异&#xff1a; 使用默认.bashrc文件&#xff1a; 大多数Linux系统都会提供一个默认的.bashrc文件。您可以复制系统默认的文件到您的主目录。 cp /etc/skel/.bashrc ~/上述命令会将…

MySQL之数据库DML

文章目录 数据操作DML插入修改删除 数据操作DML 这里的数据操作就是增删改的更新操作&#xff0c;不包括查询 插入 insert into 表 (列名1,列名2,列名3...) values (值1,值2,值3...); //向表中插入对应列 insert into 表 values (值1,值2,值3...); //向表中插入所有列第…

python基础——进程

multiprocessing模块 与进程相关的模块 使用main进程创建子进程 from multiprocessing import Process import os def func():print("这是一个func函数&#xff0c;进程号为&#xff1a;{}&#xff0c;父进程号为&#xff1a;{}".format(os.getpid(),os.getppid(…

Web06--JavaScript基础02

1、JS流程控制语句 JS与Java一样&#xff0c;也有三个流程控制语句&#xff1a; 顺序结构 选择结构 循环结构 1.1 选择结构 1.1.1 if结构 <script type"text/javascript">if (条件表达式) {代码块;} else if(条件表达式){代码块;} else {代码块;} </scr…

kafka入门(九):kafka分区分配策略

kafka分区分配策略 参数&#xff1a; Kafka提供了消费者客户端参数partition.assignment.strategy来设置消费者与订阅主题之间的分区分配策略。 默认情况下&#xff0c;此参数的值为 org.apache.kafka.clients.consumer.RangeAssignor&#xff0c;即采用RangeAssignor分配策略。…

选择排序 | 冒泡排序 | C语言(详解)

一&#xff0c;选择排序 1&#xff0c;基本知识 对排序的双层 for 循环的理解&#xff1a;外层 控制趟数&#xff0c;里层 不断地对数组进行遍历。 2&#xff0c;逐层深入 经典的选择排序GIF动图&#xff0c;如下&#xff1a; 关键部分&#xff1a; Ⅰ&#xff0c;从数组中…

mathematical-expression 实现 数学表达式解析 Java 篇

mathematical-expression 实现 数学表达式解析 Java 篇 Java技术栏 使用 ME&#xff08; mathematical-expression&#xff09;数学表达式解析库 实现Java中 数学表达式 的解析和计算。 目录 文章目录 mathematical-expression 实现 数学表达式解析 Java 篇目录mathematical-…

面试知识点:notify是随机唤醒线程吗(唤醒线程顺序)?

做 Java 开发的小伙伴&#xff0c;对 wait 方法和 notify 方法应该都比较熟悉&#xff0c;这两个方法在线程通讯中使用的频率非常高&#xff0c;但对于 notify 方法的唤醒顺序&#xff0c;有很多小伙伴的理解都是错误的&#xff0c;有很多人会认为 notify 是随机唤醒的&#xf…

构建中国人自己的私人GPT—与文档对话

先看效果 他可以从上传的文件中提取内容作为答案。上传文件摄取速度 摄取速度取决于您正在摄取的文档数量以及每个文档的大小。为了加快摄取速度&#xff0c;您可以在配置中更改摄取模式。 存在以下摄取模式&#xff1a; simple&#xff1a;历史行为&#xff0c;一次按顺序摄…

超实用桌面助手!时间、日期、天气,一目了然!完全免费!

文章目录 &#x1f4d6; 介绍 &#x1f4d6;&#x1f3e1; 环境 &#x1f3e1;&#x1f4d2; 使用方法 &#x1f4d2;⚓️ 相关链接 ⚓️ &#x1f4d6; 介绍 &#x1f4d6; 这是一款我根据自己的需求写的一个桌面小工具&#xff0c;自己一直在用&#xff0c;现在分享给需要的朋…

sysbench在mysql中的使用

sysbench安装 [rootgip ~]# yum install epel-release -y [rootgip ~]# yum install sysbench -y 查看sysbench的版本&#xff1a; [rootgip ~]# sysbench --version sysbench 1.1.0-df89d34 基于sysbench构造测试表和测试数据 sysbench --db-drivermysql --time5 --threads10…

纯前端实现了Excel文件转JSON和JSON转Excel下载

需求前提&#xff1a; 上传Excel文件&#xff0c;并将Excel文件的内容拿出来转换为JSON本地定义JSON数据&#xff0c;然后将它封装后转换为Excel文件下载 安装依赖 这两个功能是借助xlsx包实现的&#xff0c;所以需要先安装xlsx包&#xff1a; npm install xlxs依赖引用 i…