请求的Controller

import lombok.extern.slf4j.Slf4j;

import org.apache.commons.lang3.StringUtils;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.*;

@PostMapping(value = "/notifyMsg", produces = "text/plain;charset=utf-8")

public Object notify(@RequestBody String xml) {

log.info("后台接收到公众号发来的数据是:\n{}", xml);

// 把微信发送给后端的xml消息转成WechatNotifyRequestVO对象start

WechatNotifyRequestVO wechatNotifyRequestVO = XmlUtil.fromXML(xml, WechatNotifyRequestVO.class);

// 把微信发送给后端的xml消息转成WechatNotifyRequestVO对象end

if (StringUtils.equals(wechatNotifyRequestVO.getEvent(), "subscribe")) {

log.info("用户关注了微信公众号, 这里写自己的业务逻辑.....");

}

if (StringUtils.equals(wechatNotifyRequestVO.getEvent(), "unsubscribe")) {

log.info("用户取消关注公众号, 这里写自己的业务逻辑......");

}

return StringUtils.EMPTY;

}

}

WechatNotifyRequestVO类:

import com.thoughtworks.xstream.annotations.XStreamAlias;

import io.swagger.annotations.ApiModelProperty;

import lombok.Data;

import lombok.experimental.Accessors;

/**

* 详情见微信官方文档

* https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html

*/

@Data

@Accessors(chain = true)

@XStreamAlias(value = "xml")

public class WechatNotifyRequestVO {

@ApiModelProperty("开发者微信号")

@XStreamAlias(value = "ToUserName")

private String toUserName;

@ApiModelProperty("发送方帐号(一个OpenID)")

@XStreamAlias(value = "FromUserName")

private String fromUserName;

@ApiModelProperty("消息创建时间 (整型)")

@XStreamAlias(value = "CreateTime")

private Integer createTime;

@ApiModelProperty("消息类型,event")

@XStreamAlias(value = "MsgType")

private String messageType;

@ApiModelProperty("事件类型,subscribe(订阅)、unsubscribe(取消订阅)")

@XStreamAlias(value = "Event")

private String event;

}

XmlUtil工具类

import com.thoughtworks.xstream.XStream;

import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder;

import com.thoughtworks.xstream.io.xml.XppDriver;

public class XmlUtil {

private XmlUtil() {

}

/**

* xml文档解析为对象

*

* @param xml xml文档

* @param clazz 要转换的类

* @return 对象

*/

public static T fromXML(String xml, Class clazz, Class... childClazz) {

XStream xmlStream = new XStream(new XppDriver(new XmlFriendlyNameCoder("_-", "_")));

XStream.setupDefaultSecurity(xmlStream);

xmlStream.processAnnotations(new Class[]{clazz});

xmlStream.processAnnotations(childClazz);

xmlStream.allowTypes(new Class[]{clazz});

xmlStream.allowTypes(childClazz);

xmlStream.ignoreUnknownElements();

Object result = xmlStream.fromXML(xml);

return (T) result;

}

/**

* 对象组装成xml

*

* @param object 要转换的对象

* @return xml文档

*/

public static String toXML(Object object) {

//转换成XML

XStream xmlStream = new XStream(new XppDriver(new XmlFriendlyNameCoder("_-", "_")));

XStream.setupDefaultSecurity(xmlStream);

xmlStream.processAnnotations(new Class[]{object.getClass()});

xmlStream.allowTypes(new Class[]{object.getClass()});

return xmlStream.toXML(object);

}

}

java如何监听微信关注事件,Java后端接收用户关注以及发送消息或者取消微信公众号的操作...相关推荐

  1. java起socket监听,java socket 监听示例,javasocket,java socket监

    java socket 监听示例,javasocket,java socket监 java socket监听示例: socket监听需要使用SocketServer类,如下代码:package cn. ...

  2. java属性监听_Java event事件监听属性值变化 demo

    1.定义一个 ValueChangedEvent ValueChangedEvent用于在设置属性值的时候,触发事件. package org.teamlet; import java.util.Ev ...

  3. java zk监听异步_zk事件的监听和处理2

    长操作对于同一个桌面事件是被顺序处理的.换个说法,一个事件的处理程序将可以阻塞所有的后续处 理程序.一个长时间被阻塞的请求可能是不可接受的(the time blocking user's reque ...

  4. java怎么监听多个组件,java web(五):java web三大组件之另外两个和八大监听器

    java的三大组件指Servlet.Filter.Listener.八大监听器指八个接口.前面介绍了Servlet,现在介绍一下Filter拦截器以及拦截地址的设置, Listener监听那些事件. ...

  5. js监听鼠标拖动事件(按住左键拖动触发,松开左键取消)

    此段代码,实现了左键点击id元素内区域后,拖动鼠标到边缘区域滚动条(内部class元素的滚动条)自动滚动,松开鼠标后取消事件 业务需要记录一下 $(function () {var div=docum ...

  6. java键盘监听延迟_解决JAVA键盘监听的延迟现象以及八个方向的运动

    首先解释一下键盘出现延迟的原因: 其实键盘为了用户体验,在按下一次按键之后,会有片刻的延迟,为什么会这样呢? 你想一下,当你打一个字母时,连着出来了好几个字母,你心里面的感受是怎么样的? 所以嘛,键盘 ...

  7. java动作监听退出程序_监听获取程序退出事件(Linux、Windows、Java、C++)

    监听程序退出事件,主要是用于程序的优雅退出. 下面针对Java.C++在Windows.Linux下的处理分别进行介绍. 1.Java监听程序退出事件 Java本身是跨平台的,不必关系Windows还 ...

  8. Java中使用JNA实现全局监听Linux键盘事件

    title: Java中使用JNA实现全局监听Linux键盘事件 date: 2019-05-03 19:08:00 Java中使用JNA实现全局监听Linux键盘事件 用JNA实现的键盘监听,在Wi ...

  9. Java中使用JNA实现全局监听Windows键盘事件

    title: Java中使用JNA实现全局监听Windows键盘事件 date: 2019-05-02 21:55:00 Java中使用JNA实现全局监听Windows键盘事件 前言: 一直打算做一个 ...

最新文章

  1. Openssl私建CA
  2. 2020 最新自动驾驶技术报告出炉:Waymo、特斯拉、沃尔沃技术方案大起底
  3. CDN 二级回源实现
  4. sql left join 去重_混入了一些奇怪的东西?SQL小技巧之数据去重
  5. java安全编码指南之:拒绝Denial of Service
  6. oracle管理认证方式,关于Oracle数据库管理员认证方法简述
  7. 100米队伍,从队伍后到前_我们的队伍
  8. python-练习-查找匹配-模拟数据库的查找-小例子
  9. Multi_thread--Linux下多线程编程中信号量介绍及简单使用
  10. 软件测试黑马程序员课后答案_软件测试课后答案
  11. EBay架构案例分析
  12. 在IE中用js改变table的innerHTML属性报“未知的运行时错误”
  13. VScode 把tab置换为空格
  14. 新手小白之学习python一飞冲天日志之—基本数据类型,条件控制语句
  15. 12位黄金技术大佬发出警告:一大波必读好书向你袭来
  16. android emoji unicode编码表,unicode编码
  17. kepware怎么读modbus/tcp数据_注塑机设备联网?EUROMAP 63?Kepware快速帮您搞定!
  18. 基于人脸识别的门禁系统设计PPT汇报
  19. 一年中的最后一天说说_2018最后一天感言说说 怎么发朋友圈告别2018年
  20. Python Pcan USB通信(基于PcanBus)

热门文章

  1. 【树莓派】树莓派4无痛安装系统(NOOBS篇)
  2. Mac如何输入换行符
  3. 我爱学Java之Pattern和Matcher用法
  4. 悬剑2.0 tools 安装遇到的问题
  5. MongoDB 的安装详细过程
  6. 制作生鲜小程序 迷你生鲜小程序 生鲜商城 平邑做淘宝网店详情页
  7. 安卓开发解决ERROR type 3 的问题。
  8. 王者荣耀s22服务器维护,优化反成坏消息!王者荣耀S22配置要求提升,又要淘汰一批手机?...
  9. COSCon's 20 人工智能分会场介绍
  10. 力扣896 单调数列(异或法)