利用反射和自定义注解优化参数处理

文章目录

  • 自定义注解
  • 类定义
  • 反射和注解取值格式化参数
  • 测试

自定义注解

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PropertyAnnotation {
    //字段类型: STRING->0,Number 1,Decimal 2,DateTime 3, Date 4 ,int 5,Float 6,Double 7
    int type() default 0;
    //时间格式
    String dateformat() default "yyyy-MM-dd";
    //最大长度默认50
    int maxlen() default 50;
    //是否强制截取
    boolean truncate() default false;
    //填充符号 固定长度不满足长度填充字符,金额字段一般是0,一般是左填充
    String fillpadding() default "*";
    //默认值
    String value() default "";

}

类定义

/**
 * 支付的参数
 */
public class PayParamInfo {
    //支付标题
    @PropertyAnnotation(type = 0,maxlen = 20,truncate  = true,value = "支付订单",fillpadding = "#")
    private String payTitle;
    //支付日期时间
    @PropertyAnnotation(type =3,maxlen = 14,dateformat = "yyyy-MM-dd hh24:mi:ss")
    private LocalDateTime payDateTime;
    //支付数量
    @PropertyAnnotation(type = 5,maxlen = 8,fillpadding = "0")
    private int payNum;
    //支付金额 分
    @PropertyAnnotation(type = 2,maxlen = 18,fillpadding = "0")
    private BigDecimal payAmount;
   ///省略set  get
}

反射和注解取值格式化参数

 /**
     * 格式化参数
     * @param payParamInfo
     * @return
     * @throws IllegalAccessException
     */
    public String FormatParams(PayParamInfo payParamInfo) throws IllegalAccessException {
        StringBuilder sb = new StringBuilder();
        for (Field field : payParamInfo.getClass().getDeclaredFields()) {
            //获取字段对应的注解
            PropertyAnnotation p = field.getDeclaredAnnotation(PropertyAnnotation.class);
            if (p != null) {
                // 获取Field的值:
                Object value = field.get(payParamInfo);
                // 数字类型
                if (value instanceof BigDecimal) {
                    String s = value.toString();
                    if (s.contains(".")) {
                        s = s.replace(".", "");
                    }
                    int Length = p.maxlen();
                    String format = StringUtils.leftPad(s, Length, p.fillpadding());
                    sb.append(format);
                }else if (value instanceof LocalDateTime){
                    //日期时间格式
                    String format = LocalDateTimeUtil.format((LocalDateTime) value, DatePattern.NORM_DATETIME_PATTERN);
                    //format.replaceAll("-", "").replaceAll(" ","").replaceAll(":","");
                    format = StringUtils.replace(format, "-", "");
                    format = StringUtils.replace(format, " ", "");
                    format = StringUtils.replace(format, ":", "");
                    sb.append(format);
                }else{
                    String format = StringUtils.leftPad(value.toString(), p.maxlen(), p.fillpadding());
                    sb.append(format);
                }
            }
        }
        return sb.toString();
    }

测试

public class TestMain {
    public static void main(String[] args) throws IllegalAccessException {
        PayParamInfo payParamInfo=new PayParamInfo();
        payParamInfo.setPayAmount(new BigDecimal("10.01"));
        payParamInfo.setPayNum(1);
        payParamInfo.setPayDateTime(LocalDateTime.now());
        payParamInfo.setPayTitle("测试订单");
        //格式化参数
        System.out.println("拼接的参数:"+payParamInfo.FormatParams(payParamInfo));
    }
}

具体详情参见视频!

【Java】自定义注解与反射优雅实现参数拼接

如果有帮助点点关注!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MATLAB源码-第204期】基于matlab的语音降噪算法对比仿真,谱减法、维纳滤波法、自适应滤波法;参数可调。

操作环境: MATLAB 2022a 1、算法描述 语音降噪技术的目的是改善语音信号的质量,通过减少或消除背景噪声,使得语音更清晰,便于听者理解或进一步的语音处理任务,如语音识别和语音通讯。在许多实际应用中,如…

深度学习之基于YOLOv5智慧交通拥挤预警检测系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着城市化进程的加速和人口规模的不断增长,交通拥挤问题日益严重。传统的交通拥挤预警方…

C++笔记-makefile添加第三方.h和.cpp及添加.h和lib库模板

目文件结构如下所示时: project/├── main.cpp├── test.cpp├── DIRA/│ ├── A.cpp│ └── A.h├── DIRBLIB/│ └── libB.so└── include/└── B.h Makefile如下所示: # 编译器设置 CXX g CXXFLAGS -stdc11 -Wall# 目录…

互联网十万个为什么之什么是云计算

云计算是一种通过互联网提供计算资源和服务的技术。它允许用户随时随地访问和使用云平台上的数据、软件和硬件资源。在数字化时代,互联网已经成为基础设施。云计算使得数据中心能够像一台计算机一样去工作。通过互联网将算力以按需使用、按量付费的形式提供给用户&a…

2024年Q1脱毛膏线上市场(京东天猫淘宝)销量销额排行榜

鲸参谋监测的2024年Q1季度线上电商平台(天猫淘宝京东)脱毛膏行业销售数据已出炉! 根据鲸参谋数据显示,今年Q1季度在线上电商平台(天猫淘宝京东),脱毛膏的销量累计接近220万件,环比增…

基于51单片机的ADC0804的电压表设计(仿真+源码+设计资料)

目录 1、前言 2、资料内容 3、仿真图 4、程序 资料下载地址:基于51单片机的ADC0804的电压表设计(仿真源码设计资料) 1、前言 最近看网上有很少的ADC0804的设计了,都由0809代替,但是有个别因为成本原因和学校课…

使用Express+Node.js搭建网站

Express是一个基于Node.js平台的快速、开放、极简的Web开发框架。它的作用是专门用来创建Web服务器,与Node.js内置的http模块功能相似,但更为简便和高效。 Express中文官网:Express - 基于 Node.js 平台的 web 应用开发框架 - Express中文文…

25考研英语长难句Day02

25考研英语长难句Day02 【a.词组】【b.断句】 如果你是你讲话对象中的一员,你就能了解你们大家共同的经历和问题,你也可以顺便评论一下食堂里难吃的食物或董事长臭名昭著的领带品味。 【a.词组】 单词解释addressv. 演说, 演讲;…

一堆自定义C#代码片段,让你开发效率飞涨

SharpBoxes 是一款用于 Visual Studio 的扩展,作者为本人; 该扩展旨在提高开发效率。它为开发人员提供了一组日常使用频率较高的代码片段,让你在编写代码时能够更快地插入常用的代码段。通过安装这个扩展,你可以使用快捷键轻松插…

Django 4.x 智能分页get_elided_page_range

Django智能分页 分页效果 第1页的效果 第10页的效果 带输入框的效果 主要函数 # 参数解释 # number: 当前页码,默认:1 # on_each_side:当前页码前后显示几页,默认:3 # on_ends:首尾固定显示几页&#…

【在线OJ】Vue创建OJ管理系统

一、创建项目 vue ui命令创建项目 项目创建完成后来到项目 二、导航栏 首先创建一个根页面,让他展示在页面上 创建之后来到路由配置界面 然后安装ElementUI,来到官网找到导航栏 复制代码后粘贴到刚才创建的vue文件里,启动项目&#xff…

力扣:62. 不同路径

62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径&…

SolidWorks进行热力学有限元分析二、模型装配

1.先打开软件,新建装配体 2.选中你要装配的零件,直接导入就行 3.鼠标点击左键直接先放进去 4.开始装配,点配合 5.选择你要接触的两个面,鼠标右键确定,然后把剩下的面对齐一下就行了 6.搞定

《十九》Qt Http协议及实战

前言 本篇文章来给大家讲解QT中的Http协议,Http协议主要用于网络中数据的请求和响应,那么这篇文章将给大家讲解一下这个协议。 一、HTTP概述 HTTP(超文本传输协议)是互联网上应用最为广泛的协议之一,它定义了客户端…

[开发|鸿蒙] 鸿蒙OS开发环境搭建(笔记,持续更新)

搭建开发环境流程: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/installation_process-0000001071425528-V2 鸿蒙DevEco Studio 3.1.1 Release仅支持windows和mac系统 运行环境要求 为保证DevEco Studio正常运行,建议电脑配置…

事务的使用 @Transactional

更新操作多个数据表的时候需要使用到事务 事务:要么都执行,要么都不执行。 1.Transactional 如果有异常,只有RunTimeException和Error时,事务才会生效,否则事务不会生效,需要手动开启事务currentTransacti…

基于Springboot+Vue的Java项目-鲜牛奶订购系统开发实战(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &am…

华为eNSP中型企业局域网网络规划设计(下)

→b站传送门,感谢大佬← →华为eNSP中型企业局域网网络规划设计(上)← →拓扑图传送门,可以自己配置着玩← 配置ospf AR3 [AR3]ospf 1 router-id 3.3.3.3 //出口默认路由 [AR3-ospf-1]default-route-advertise always #area…

Go 语言基础之指针、复合类型【数组、切片、指针、map、struct】

1、数组 特别需要注意的是:在 Go 语言中,数组长度也是数组类型的一部分!所以尽管元素类型相同但是长度不同的两个数组,它们的类型并不相同。 1.1、数组的初始化 1.1.1、通过初始化列表{}来设置值 var arr [3]int // int类型的数…

阿里云CentOS 7.9 64位 Liunx 安装redis

具体的步骤如下: 添加 EPEL 仓库,因为 Redis 在标准的 CentOS 仓库中不可用: sudo yum install epel-release安装 Redis: sudo yum install redis启动 Redis 服务: sudo systemctl start redis如果你想让 Redis 在…
最新文章