V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
srs1995
V2EX  ›  Java

野路子 Java

  •  
  •   srs1995 · 2020-04-26 10:02:55 +08:00 · 4188 次点击
    这是一个创建于 1708 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人非科班出身 现在在一家公司开发 碰到一段代码 本人可能研究不太透彻 所以 想让大家看看有没有什么问题

    代码: https://gist.github.com/liangtengyu/249b3c3142de2e907aaa8f86ac98b47a

    b821025551b
        2
    b821025551b  
       2020-04-26 10:15:09 +08:00
    所以问题是什么?
    yesterdaysun
        3
    yesterdaysun  
       2020-04-26 10:20:25 +08:00
    我感觉没什么问题, 就是一个辅助生成 api 参数的类, 用 treemap 保证参数顺序, 生成签名, 除了代码有稍微点冗余繁琐, 命名有点别扭之外, 就是常规操作
    php01
        4
    php01  
       2020-04-26 10:36:35 +08:00
    我也是野路子,之前看过一段时间 java,没看出啥问题。。。
    guyeu
        5
    guyeu  
       2020-04-26 10:46:59 +08:00
    你如果看这段代码不顺眼,就重构它直到顺眼呗。。。挂在 v 站找人一起批判么。。
    jerrry
        6
    jerrry  
       2020-04-26 12:00:55 +08:00
    类名命名不合理,CarRequestPayLoad 更好一点
    siteshen
        7
    siteshen  
       2020-04-26 12:14:41 +08:00
    代码没什么问题,不过倒是 signature 的算法和一般的不一样。

    一般是这种:
    输入是: {"a": 123, "c": 292, "b": 299}
    签名的字符串是:a=123&b=299&c=292

    很少会要求 JSON 的 key 是「有序」的。这通常意味着要么依赖内置的排序(不同语言的排序方式可能不一样),要么手动对 JSON 的 key 排序(麻烦,某些语言甚至只能用拼接字符串的方式实现所谓的 JSON encode )。
    tt0411
        8
    tt0411  
       2020-04-26 12:28:50 +08:00
    代码风格比较差, 确实比较野路子
    dallaslu
        9
    dallaslu  
       2020-04-26 12:36:10 +08:00
    就是个排序签名的包装类嘛
    yeqizhang
        10
    yeqizhang  
       2020-04-26 12:47:02 +08:00 via Android
    代码没贴全……
    只能看出代码不够简洁的样子,不知道那个里面的赋值操作的意义……
    其它没啥问题
    yeqizhang
        11
    yeqizhang  
       2020-04-26 13:00:06 +08:00 via Android
    还有,他这个应该用了静态变量……线程不安全……
    然后一个工具类方法内部处理直接 return 就完事的东西不知道为什么这么写
    vitoliu
        12
    vitoliu  
       2020-04-26 13:14:41 +08:00
    一个排序能做到的事,手动 new 个 map 再依次声明顺序的 put...感觉是脱裤子放屁
    NeinChn
        13
    NeinChn  
       2020-04-26 13:26:30 +08:00
    @vitoliu
    这个不可避免,最后是作为 output 的 map 往外传递的
    这里面是组装格式,又不仅仅是算个 hmac
    这里不改其他地方也得做。。。
    你代码没看仔细吧
    srs1995
        14
    srs1995  
    OP
       2020-04-26 13:41:28 +08:00
    @guyeu 主要是看看有没有线程安全一类的问题
    woscaizi
        15
    woscaizi  
       2020-04-26 14:11:10 +08:00
    public TreeMap getTreeMap(){
    return this.treeMap;
    }

    1. treeMap 没看到定义在哪了。
    2. 如果只是为了传 TreeMap,加入别的内容, 这么写看起来确实不太“好看”。
    srs1995
        16
    srs1995  
    OP
       2020-04-26 16:04:27 +08:00
    @woscaizi 调用的位置在这里

    @Override
    public String refund(String plateNum, final String OrderId, Integer amount) throws Exception {
    TreeMap<String, Object> treeMap = new TreeMap<>(); //新建空的 treemap
    treeMap.put("refundId", System.currentTimeMillis() + "refund"); //组织参数
    treeMap.put("plateNumber", plateNum);//组织参数
    treeMap.put("refundAmount", amount);//组织参数
    treeMap.put("orderId", OrderId);//组织参数
    RefundInfo carOutRequestInfo = new RefundInfo(treeMap);
    String post = UrlConnectUtil.post( Constant.baseUrl + "/refund/bill", carOutRequestInfo.getTreeMap());

    if (StringUtils.isNotBlank(post)) {
    xxx
    }
    guyeu
        17
    guyeu  
       2020-04-26 16:14:48 +08:00
    @srs1995 #14 如果用到的静态方法都是线程安全的,那他这个没有线程安全问题。
    MaxTan
        18
    MaxTan  
       2020-04-26 16:16:39 +08:00
    代码没格式化
    vitoliu
        19
    vitoliu  
       2020-04-27 14:15:59 +08:00
    @NeinChn 不好意思,我没看懂你写的任何一句话,我仔细看了,这方法就是拿几个固定的参数配合请求参数加签生成 token,然后放到参数 map 里面生成 body 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2388 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:45 · PVG 23:45 · LAX 07:45 · JFK 10:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.