微信开发后台处理消息时使用反射,去掉繁琐的if判断
来源:互联网 发布:网络飞行游戏 编辑:程序博客网 时间:2024/05/17 02:41
最近页在做微信开发,看了一些文章之后发现后台接受消息判断都是逐条if判断消息类型,再执行相应的方法,感觉太low,不爽。
1.传统的开发大致是这样的
//订阅 if("text".equals(msgtType)) { // } else if("event".equals(msgtType)) { // } else if("degndegn".equals(msgType)) { // } //很多if
2这样感觉很费事所以想根据消息类型自动去执行相应的方法,所以想到了反射
2.1在controller中根据消息类型,执行service中的方法,service方法命名以handler开头,消息类型,Msg结尾,如handlerTextMsg,handlerEventMsg等。
/* * 微信核心接受消息方法 */ @RequestMapping(value = "/core", method = RequestMethod.POST) public void core(HttpServletRequest request, HttpServletResponse response) { try { //初始化响应 response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); String respXml = ""; HashMap<String, String> requestMap = WeiChatUtils.parseXML(request); String fromUserName = requestMap.get("FromUserName"); String toUserName = requestMap.get("ToUserName"); String msgType = requestMap.get("MsgType"); BaseMessage msg = new BaseMessage(); msg.setCreateTime(new Date().getTime()); msg.setFromUserName(toUserName); msg.setToUserName(fromUserName); //执行相应的方法 String methodName = (String) methodMap.get(msgType); if(null != methodName) { Method method = ReflectionUtils.findMethod(springContextsUtil.getBean("weChatCoreService").getClass(), methodName, BaseMessage.class, HashMap.class); respXml = (String) ReflectionUtils.invokeMethod(method, springContextsUtil.getBean("weChatCoreService"), msg, requestMap); } out.print(respXml); out.close(); } catch (Exception e) { logger.error("微信处理消息出错:",e); } }
2.2初始化方法名,不包括tostring等方法
/* 绑定消息类型和处理函数 */ public WeChatCoreController() { Method[] methods = ReflectionUtils.getAllDeclaredMethods(WeChatCoreServiceImpl.class); for(Method method: methods) { String value = method.getName(); String key = method.getName().replace("handler", "").replace("Msg", "").toLowerCase();; if(value.startsWith("handler")) { methodMap.put(key, value); } } }
2.3spring容器获取工具,用户获取spring实例的service
public class SpringContextsUtil implements ApplicationContextAware { private ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } public Object getBean(String beanName) { return applicationContext.getBean(beanName); } public <T> T getBean(String beanName, Class<T> clazs) { return clazs.cast(getBean(beanName)); }}以上代码属于呆着没事,想写出更简单的代码,更高的逼格,纯属装逼,不喜勿喷
阅读全文
0 0
- 微信开发后台处理消息时使用反射,去掉繁琐的if判断
- mybatis 里面使用<if test=""> 判断,当后台传的值是数字字符串时,怎么处理
- 微信开发(二)---处理接受的消息
- 微信开发三 使用反射根据消息类型自动调用不同方法
- 微信开发三 使用反射根据消息类型自动调用不同方法
- 使用delphi+intraweb进行微信开发3—微信消息处理
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(72)-微信公众平台开发-消息处理
- 微信后台开发-如何回复给用户不同类型的消息
- 微信开发专题---6微信消息处理
- C#开发微信门户及应用(2)--微信消息的处理和应答
- 【JAVA微信开发】WxMessageSDK-轻量的微信公众号消息处理SDK
- 微信开发之客服消息的使用
- 微信公众号开发---消息模板的使用
- 微信公众帐号开发教程第4篇-消息及消息处理工具的封装
- 微信公众帐号开发教程第4篇-消息及消息处理工具的封装
- 微信公众帐号开发教程第4篇-消息及消息处理工具的封装
- 微信公众帐号开发教程第4篇-消息及消息处理工具的封装
- 微信公众帐号开发教程第4篇-消息及消息处理工具的封装
- python中关于类的理解
- 易飞去除批处理删除历史单据权限
- [UE4]后期处理(Post Processing)相关的官方文档
- 【深度学习】VGGNet的tensorflow实现code
- 培养创造力的10个注意点
- 微信开发后台处理消息时使用反射,去掉繁琐的if判断
- Scrollow嵌套RecyclverView出现滑动卡顿
- DotNet 资源大全中文版(Awesome最新版)
- 链接:NFC:高级NFC
- PHP最佳实践(译)
- JAVA大神之路
- 解决Nutz连接Oracle扫描建表,错误信息:无效字符
- [Ubuntu Error]无法获得锁 /var/lib/dpkg/lock
- openGL两种投影方式