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

野路子 Java

  •  
  •   srs1995 · 270 天前 · 3264 次点击
    这是一个创建于 270 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    1. treeMap 没看到定义在哪了。
    2. 如果只是为了传 TreeMap,加入别的内容, 这么写看起来确实不太“好看”。
    srs1995
        16
    srs1995   270 天前
    @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   270 天前
    @srs1995 #14 如果用到的静态方法都是线程安全的,那他这个没有线程安全问题。
    MaxTan
        18
    MaxTan   270 天前
    代码没格式化
    vitoliu
        19
    vitoliu   269 天前
    @NeinChn 不好意思,我没看懂你写的任何一句话,我仔细看了,这方法就是拿几个固定的参数配合请求参数加签生成 token,然后放到参数 map 里面生成 body 。
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3652 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 01:05 · PVG 09:05 · LAX 17:05 · JFK 20:05
    ♥ Do have faith in what you're doing.