• 接口开发 -签名方式:对请求的参数名进行按字母排序 实现及优化


    一般的实现方式:

     // 构建签名
    TreeMap<String, Object> signParams = new TreeMap<>();
    params.put("mobile", "123");
    HashMap<String, Object> params = new HashMap<>();
    params.put("sign", SignUtil.signByMap(privateKey, signParams));
    
    

    TreeMap分析:

    TreeMap默认排序规则:按照key的字典顺序来排序(升序),和字段放入的前后没有关系

    测试:

    public static void main(String[] args) {
            Map<String,Object> params = new TreeMap<>();
            params.put("b1","b1");
            params.put("a1","c1");
            params.put("c1","c1");
            System.out.println(params);
    }
    
    {a1=c1, b1=b1, c1=c1}
    

    使用方法,通过反射的方式根据实体类属性值创建TreeMap对象

    public static TreeMap<String, Object> parseTreeMap(Object model) throws Exception {
      TreeMap<String, Object> param = new TreeMap<String, Object>();
      Field[] field = model.getClass().getDeclaredFields();
      for (int j = 0; j < field.length; j++) {
        String name = field[j].getName();
        // 将属性的首字符大写,方便构造get,set方法
        name = name.substring(0, 1).toUpperCase() + name.substring(1);
        String type = field[j].getGenericType().toString();
        if ("class java.lang.String".equals(type)) {
          Method m = model.getClass().getMethod("get" + name);
          String value = (String) m.invoke(model);
          if (!StringUtils.isEmpty(value)) {
            param.put(name, value);
          } 
        }
        if ("class java.lang.Integer".equals(type)) {
          Method m = model.getClass().getMethod("get" + name);
          Integer value = (Integer) m.invoke(model);
          if (value != null) {
            param.put(name, value);
          } 
        }
        if ("class java.lang.Short".equals(type)) {
          Method m = model.getClass().getMethod("get" + name);
          Short value = (Short) m.invoke(model);
          if (value != null) {
            param.put(name, value);
          } 
        }
        if ("class java.lang.Double".equals(type)) {
          Method m = model.getClass().getMethod("get" + name);
          Double value = (Double) m.invoke(model);
          if (value != null) {
            param.put(name, value);
          } 
        }
        if ("class java.lang.Boolean".equals(type)) {
          Method m = model.getClass().getMethod("get" + name);
          Boolean value = (Boolean) m.invoke(model);
          if (value != null) {
            param.put(name, value);
          } 
        }
        if ("class java.util.Date".equals(type)) {
          Method m = model.getClass().getMethod("get" + name);
          Date value = (Date) m.invoke(model);
          if (value != null) {
            param.put(name, value);
          } 
        }
      }
      return param;
    }
    

    TreeMap<String, Object> signParams = ClassUtil.parseTreeMap(vo)

    end

    通过知识/经验的分享,节省开发者的时间.
  • 相关阅读:
    Matplotlib中柱状图bar使用
    python IDLE颜色设置
    linux报错汇总
    PCA
    高斯混合模型
    深度解剖dubbo源码---01dubbo的架构原理-探索.mp4
    SpringCloud之初识Feign
    第七模块 :微服务监控告警Prometheus架构和实践
    第四模块 :微服务调用链监控CAT架构和实践
    skywalking中文文档
  • 原文地址:https://www.cnblogs.com/ysloong/p/14348219.html
Copyright © 2020-2023  润新知