首页 > 编程语言 >java 按照自定义顺序枚举实体类的属性值

java 按照自定义顺序枚举实体类的属性值

时间:2023-02-15 15:25:41浏览次数:43  
标签:实体类 java 自定义 FieldOrder private annotation import order String

工具类

    /**
     * 按照字段顺序进行拼接
     *
     * @param obj 对象,需要在字段上添加FieldOrder注解
     * @param fix 拼接符号
     * @param <T>
     * @return
     * @author JeWang
     */
    public static <T> String toSpit(T obj, String fix) throws IllegalAccessException {
        String ret = "";
        Field[] declaredFields = obj.getClass().getDeclaredFields();
        Field[] fields = new Field[declaredFields.length];
        for (Field declaredField : declaredFields) {
            FieldOrder annotation = declaredField.getAnnotation(FieldOrder.class);
            int order = annotation.order();
            fields[order - 1] = declaredField;
        }
        for (Field field : fields) {
            field.setAccessible(true);
            Object o = field.get(obj);
            if (o == null) {
                ret = ret + "" + fix;
            } else {
                ret = ret + o + fix;
            }
        }
        return ret;

注解

package cn.daenx.japi.bank.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldOrder {

    /**
     * 标注该属性的顺序
     * 从1开始,不可跳跃
     *
     * @return 该属性的顺序
     */
    int order();
}

示例实体类

package cn.daenx.japi.bank.vo.req;

import cn.daenx.japi.bank.annotation.FieldOrder;
import lombok.Data;

@Data
public class R0804ReqVo {

    /**
     * 交易代码
     */
    @FieldOrder(order = 1)
    private String tradeCode;

    /**
     * POS厂商代码
     */
    @FieldOrder(order = 2)
    private String posFirmCode;

    /**
     * POS唯一编号
     */
    @FieldOrder(order = 3)
    private String posOnlyCode;

    /**
     * 银行卡账户名称
     */
    @FieldOrder(order = 4)
    private String bankAccountName;

    /**
     * 银行卡账户账号
     */
    @FieldOrder(order = 5)
    private String bankAccountNumber;

    /**
     * 银行卡发卡行
     */
    @FieldOrder(order = 6)
    private String bankIssuer;

    /**
     * 发起方
     */
    @FieldOrder(order = 7)
    private String fromType;
}

使用方法

      //生成请求内容
        String reqStr;
        try {
            reqStr = CommonUtils.toSpit(vo, "|");
        } catch (IllegalAccessException e) {
            return new R0801ResVo("请求数据转换失败");
        }

标签:实体类,java,自定义,FieldOrder,private,annotation,import,order,String
From: https://www.cnblogs.com/daen/p/17123140.html

相关文章

  • java selenuim 对canvas进行截图
    之前通过jsoup爬取一些静态的数据都可以 最近要爬一张动态渲染的地图   jsoup爬不出来 只能用selenuim 打开浏览器截图了 selenuim按照过程有点小坑......
  • java 代码优化
    代码优化的目标是:1.减小代码的体积2.提高代码运行的效率1、尽量指定类、方法的final修饰符带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子......
  • Vue 自定义指令-directive
    什么是自定义指令vue官方提供了v-text、v-for、v-model、v-if等常用的指令。除此之外vue还允许开发者自定义指令。局部自定义指令的使用<body><divid="app">......
  • antd table 自定义折叠展开图标(示例)
    expandable={{expandedRowKeys,onExpandedRowsChange:(expandedRows)=>{updateState((draft)=......
  • Vue 自定义指令-directives
    什么是自定义指令vue官方提供了v-text、v-for、v-model、v-if等常用的指令。除此之外vue还允许开发者自定义指令。局部自定义指令的使用<body><divid="app">......
  • Java入门
    一、了解Java1.JAVA三大版本Java2标准版(J2SE):桌面程序(控制台开发)Java2移动版(J2ME):嵌入入式开发(手机小家电)Java2企业版(J2EE):企业级开发(web端,服务......
  • 【java】java面试高频知识点2
    1.重写重载重写:继承时对父类的方法重写该方法内容,方法类型是不变的,即返回类型,方法名字,参数都不变。值得注意的是可以改变权限,只能提高不能降低重载:是一个类中有多个名字......
  • 自定义跨域中间件
    fromdjango.utils.deprecationimportMiddlewareMixin​​classCorsMiddleware(MiddlewareMixin):  """屏蔽CORS跨域"""​  defprocess_response(self,reques......
  • 怎样监控java进程?
    1问题怎样实现对自己编写的java程序的监控?比如说想知道:请求的tpsjvm的内存信息,线程信息线程池的使用情况等。某段代码的执行时间常用方法就是埋点,通过代理减小业务......
  • 重学Java-第七章 Java表达式、语句和块
    7.1表达式7.1.1定义 表达式是由数字、运算符、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合,约束变量是在表达式中已被指定数值,......