V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
srs1995
V2EX  ›  Java

野路子 Java

  •  
  •   srs1995 · Apr 26, 2020 · 4927 views
    This topic created in 2198 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    1. treeMap 没看到定义在哪了。
    2. 如果只是为了传 TreeMap,加入别的内容, 这么写看起来确实不太“好看”。
    srs1995
        16
    srs1995  
    OP
       Apr 26, 2020
    @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  
       Apr 26, 2020
    @srs1995 #14 如果用到的静态方法都是线程安全的,那他这个没有线程安全问题。
    MaxTan
        18
    MaxTan  
       Apr 26, 2020
    代码没格式化
    vitoliu
        19
    vitoliu  
       Apr 27, 2020
    @NeinChn 不好意思,我没看懂你写的任何一句话,我仔细看了,这方法就是拿几个固定的参数配合请求参数加签生成 token,然后放到参数 map 里面生成 body 。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2709 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 13:51 · PVG 21:51 · LAX 06:51 · JFK 09:51
    ♥ Do have faith in what you're doing.