微信被动回复事件消息生成的动态URL错乱

丨深水蓝丨 2016-08-10 03:21:56
这是一个正确的日志信息

xxxxxxx

只是一个错误的日志
xxxxxxxx

微信回复的图文URL是根据EventKey生成的,为什么有时候是对的,有时候确是错的,数据库的记录都是对的,用户收到的图文消息连接确是错的。求解决呀,我头都搞大了。。
...全文
274 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
丨深水蓝丨 2016-08-11
  • 打赏
  • 举报
回复
引用 10 楼 bree06 的回复:
[quote=引用 9 楼 qq445422083 的回复:] [quote=引用 7 楼 bree06 的回复:] 你实在要使用全局的customResponseMap, 那在取resultMap的时候进行深拷贝也是可以的. 如果resultMap值不多的话就放在方法里new出来然后再put值, (这里put值如果是对象且从全局customResponseMap取的话也要考虑深拷贝).
引用 8 楼 bree06 的回复:
你做个测试就知道了, resultMap = (Map<Object, Object>) customResponseMap.get(eventType);这个语句只要eventType相同那么都是同一个引用, 你改变了其中的值, 其它指向这个对象的引用也同样受影响.
好的,我先实验一下,你等我哈[/quote] 测试很简单, 不改代码的前提下, 跑一下测试, 到resultMap.put("LINK", link);这句的时候查看一下全局的customResponseMap中对应eventType的Map值有没有变就行了[/quote] 感谢大神,真是这个问题,解决了。。
bree06 2016-08-11
  • 打赏
  • 举报
回复
引用 9 楼 qq445422083 的回复:
[quote=引用 7 楼 bree06 的回复:] 你实在要使用全局的customResponseMap, 那在取resultMap的时候进行深拷贝也是可以的. 如果resultMap值不多的话就放在方法里new出来然后再put值, (这里put值如果是对象且从全局customResponseMap取的话也要考虑深拷贝).
引用 8 楼 bree06 的回复:
你做个测试就知道了, resultMap = (Map<Object, Object>) customResponseMap.get(eventType);这个语句只要eventType相同那么都是同一个引用, 你改变了其中的值, 其它指向这个对象的引用也同样受影响.
好的,我先实验一下,你等我哈[/quote] 测试很简单, 不改代码的前提下, 跑一下测试, 到resultMap.put("LINK", link);这句的时候查看一下全局的customResponseMap中对应eventType的Map值有没有变就行了
丨深水蓝丨 2016-08-11
  • 打赏
  • 举报
回复
引用 7 楼 bree06 的回复:
你实在要使用全局的customResponseMap, 那在取resultMap的时候进行深拷贝也是可以的. 如果resultMap值不多的话就放在方法里new出来然后再put值, (这里put值如果是对象且从全局customResponseMap取的话也要考虑深拷贝).
引用 8 楼 bree06 的回复:
你做个测试就知道了, resultMap = (Map<Object, Object>) customResponseMap.get(eventType);这个语句只要eventType相同那么都是同一个引用, 你改变了其中的值, 其它指向这个对象的引用也同样受影响.
好的,我先实验一下,你等我哈
bree06 2016-08-11
  • 打赏
  • 举报
回复
你做个测试就知道了, resultMap = (Map<Object, Object>) customResponseMap.get(eventType);这个语句只要eventType相同那么都是同一个引用, 你改变了其中的值, 其它指向这个对象的引用也同样受影响.
bree06 2016-08-11
  • 打赏
  • 举报
回复
你实在要使用全局的customResponseMap, 那在取resultMap的时候进行深拷贝也是可以的. 如果resultMap值不多的话就放在方法里new出来然后再put值, (这里put值如果是对象且从全局customResponseMap取的话也要考虑深拷贝).
丨深水蓝丨 2016-08-11
  • 打赏
  • 举报
回复
引用 5 楼 bree06 的回复:
customResponseMap是全局的, 你的resultMap是从这里取的, 而你又改变了resultMap里的值, 这样就会影响到所有线程.
resultMap是局部的呀,我只是改变了这里的值,resultMap每次访问都会重新new,customResponseMap是全局只读的。
bree06 2016-08-11
  • 打赏
  • 举报
回复
customResponseMap是全局的, 你的resultMap是从这里取的, 而你又改变了resultMap里的值, 这样就会影响到所有线程.
丨深水蓝丨 2016-08-11
  • 打赏
  • 举报
回复
引用 3 楼 bree06 的回复:
看看不是使用了全局的变量, 在并发下全局变量未同步就会出这种问题. 一个一个访问没问题, 好几个人一起访问就数据混乱了.
是有全局变量,但都是只读的公用数据。
bree06 2016-08-11
  • 打赏
  • 举报
回复
看看不是使用了全局的变量, 在并发下全局变量未同步就会出这种问题. 一个一个访问没问题, 好几个人一起访问就数据混乱了.
丨深水蓝丨 2016-08-10
  • 打赏
  • 举报
回复
模拟微信发送数据 reqMsg={Ticket=gQHK7zoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL2FVeGYwSXJrdFRITTFIcnZyV1JTAAIE0gZ_VwMEAAAAAA==, FromUserName=oltm2t7n5JNB72iSKJ_qyjkihSL0, EventKey=qrscene_shgw_22259, Event=subscribe, CreateTime=1470799912, ToUserName=gh_5e0cae808e36, MsgType=event}
丨深水蓝丨 2016-08-10
  • 打赏
  • 举报
回复
这是源码信息:



xxxxxx

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧