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

    一般的实现方式:

     // 构建签名
    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

    通过知识/经验的分享,节省开发者的时间.
  • 相关阅读:
    MySQL的FORMAT函数用法规则
    jetbrains idea/webstorm等(注册,激活,破解码,一起支持正版,最新可用)(2017.3.16更新)【转】
    用户价值模型 CITE :https://www.jianshu.com/p/34199b13ffbc
    用户生命周期模型
    机器学习十大常用算法(CITE 不会停的蜗牛 ) interesting
    Linux 安装Oracle11g完整安装图文教程另附基本操作 (分享)
    oracle 命中率
    SQL学习总结笔记
    hash join
    Tomcat详细安装配置
  • 原文地址:https://www.cnblogs.com/ysloong/p/14348219.html
Copyright © 2011-2022 走看看