野路子 Java

2020-04-26 10:02:55 +08:00
 srs1995

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

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

4145 次点击
所在节点    Java
19 条回复
srs1995
2020-04-26 10:03:32 +08:00
b821025551b
2020-04-26 10:15:09 +08:00
所以问题是什么?
yesterdaysun
2020-04-26 10:20:25 +08:00
我感觉没什么问题, 就是一个辅助生成 api 参数的类, 用 treemap 保证参数顺序, 生成签名, 除了代码有稍微点冗余繁琐, 命名有点别扭之外, 就是常规操作
php01
2020-04-26 10:36:35 +08:00
我也是野路子,之前看过一段时间 java,没看出啥问题。。。
guyeu
2020-04-26 10:46:59 +08:00
你如果看这段代码不顺眼,就重构它直到顺眼呗。。。挂在 v 站找人一起批判么。。
jerrry
2020-04-26 12:00:55 +08:00
类名命名不合理,CarRequestPayLoad 更好一点
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
2020-04-26 12:28:50 +08:00
代码风格比较差, 确实比较野路子
dallaslu
2020-04-26 12:36:10 +08:00
就是个排序签名的包装类嘛
yeqizhang
2020-04-26 12:47:02 +08:00
代码没贴全……
只能看出代码不够简洁的样子,不知道那个里面的赋值操作的意义……
其它没啥问题
yeqizhang
2020-04-26 13:00:06 +08:00
还有,他这个应该用了静态变量……线程不安全……
然后一个工具类方法内部处理直接 return 就完事的东西不知道为什么这么写
vitoliu
2020-04-26 13:14:41 +08:00
一个排序能做到的事,手动 new 个 map 再依次声明顺序的 put...感觉是脱裤子放屁
NeinChn
2020-04-26 13:26:30 +08:00
@vitoliu
这个不可避免,最后是作为 output 的 map 往外传递的
这里面是组装格式,又不仅仅是算个 hmac
这里不改其他地方也得做。。。
你代码没看仔细吧
srs1995
2020-04-26 13:41:28 +08:00
@guyeu 主要是看看有没有线程安全一类的问题
woscaizi
2020-04-26 14:11:10 +08:00
public TreeMap getTreeMap(){
return this.treeMap;
}

1. treeMap 没看到定义在哪了。
2. 如果只是为了传 TreeMap,加入别的内容, 这么写看起来确实不太“好看”。
srs1995
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
2020-04-26 16:14:48 +08:00
@srs1995 #14 如果用到的静态方法都是线程安全的,那他这个没有线程安全问题。
MaxTan
2020-04-26 16:16:39 +08:00
代码没格式化
vitoliu
2020-04-27 14:15:59 +08:00
@NeinChn 不好意思,我没看懂你写的任何一句话,我仔细看了,这方法就是拿几个固定的参数配合请求参数加签生成 token,然后放到参数 map 里面生成 body 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/666165

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX