shikeying
2024-01-11 3b67e947e36133e2a40eb2737b15ea375e157ea0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package com.walker.pay;
 
import com.walker.infrastructure.utils.ClassUtils;
import com.walker.infrastructure.utils.StringUtils;
 
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
 
/**
 * 定义基础通知对象,可提供一些基础方法,目前只有生成序列化签名。<p></p>
 * 该对象通常是第三方通知请求的原始数据,子类根据业务属性继承使用,并定义属性。
 * @author 时克英
 * @date 2023-03-06
 */
public abstract class RequestNotifyBean {
 
    /**
     * 转换成签名序列化字符串,按照key/value拼接方式,以字母表顺序。
     * @return
     * @date 2023-03-06
     */
    public String toSignSerialize(){
        Field[] fields = this.getClass().getDeclaredFields();
        List<String> fieldNameList = new ArrayList<>(8);
        for(int i=0;i<fields.length;i++){
            fieldNameList.add(fields[i].getName());
        }
        Collections.sort(fieldNameList);
        System.out.println(fieldNameList);
        if(StringUtils.isEmptyList(fieldNameList)){
            return StringUtils.EMPTY_STRING;
        }
 
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<fieldNameList.size(); i++){
            if(i > 0){
                sb.append(StringUtils.CHAR_AND);
            }
            sb.append(fieldNameList.get(i))
                    .append(StringUtils.CHAR_EQUALS)
                    .append(ClassUtils.getFieldValueByName(fieldNameList.get(i), this));
        }
        return sb.toString();
    }
}