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

野路子 Java

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

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

    代码: 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 保证参数顺序, 生成签名, 除了代码有稍微点冗余繁琐, 命名有点别扭之外, 就是常规操作
    anteros
        4
    anteros  
       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     Solana     5745 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 01:31 PVG 09:31 LAX 18:31 JFK 21:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86