{"id":29958,"date":"2024-11-25T15:30:21","date_gmt":"2024-11-25T07:30:21","guid":{"rendered":"https:\/\/fwq.ai\/blog\/29958\/"},"modified":"2024-11-25T15:30:21","modified_gmt":"2024-11-25T07:30:21","slug":"%e5%be%ae%e4%bf%a1%e5%88%86%e7%b1%bb%e6%8e%a5%e6%94%b6%e6%b6%88%e6%81%af%e4%bb%a5%e5%8f%8a%e5%88%9b%e5%bb%ba%e5%ae%9e%e4%bd%93%e7%9a%84java%e4%bb%a3%e7%a0%81%e5%ae%9e%e4%be%8b","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/29958\/","title":{"rendered":"\u5fae\u4fe1\u5206\u7c7b\u63a5\u6536\u6d88\u606f\u4ee5\u53ca\u521b\u5efa\u5b9e\u4f53\u7684java\u4ee3\u7801\u5b9e\u4f8b"},"content":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u4e3b\u8981\u4e3a\u5927\u5bb6\u8be6\u7ec6\u4ecb\u7ecd\u4e86java\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u5f00\u53d1\u7b2c\u4e09\u6b65\uff0c\u63a5\u6536\u6d88\u606f\u7684\u5206\u7c7b\u53ca\u5b9e\u4f53\u7684\u521b\u5efa\uff0c\u5177\u6709\u4e00\u5b9a\u7684\u53c2\u8003\u4ef7\u503c\uff0c\u611f\u5174\u8da3\u7684\u5c0f\u4f19\u4f34\u4eec\u53ef\u4ee5\u53c2\u8003\u4e00\u4e0b<\/p>\n<p>\u524d\u9762\u4e00\u7bc7\u6709\u8bf4\u9053\u5e94\u7528\u670d\u52a1\u5668\u548c\u817e\u8baf\u670d\u52a1\u5668\u662f\u901a\u8fc7\u6d88\u606f\u8fdb\u884c\u901a\u8baf\u7684\uff0c\u5e76\u7b80\u5355\u4ecb\u7ecd\u4e86\u5fae\u4fe1\u7aefpost\u7684\u6d88\u606f\u7c7b\u578b\uff0c\u8fd9\u91cc\u6211\u4eec\u5c06\u5efa\u7acb\u6d88\u606f\u5b9e\u4f53\u4ee5\u65b9\u4fbf\u6211\u4eec\u540e\u9762\u7684\u4f7f\u7528\uff01<\/p>\n<p><strong>\uff08\u4e00\uff09\u6d88\u606f\u5b9e\u4f53\u57fa\u7840\u7c7b<\/strong><\/p>\n<pre>package&nbsp;com.cuiyongzhi.wechat.message.req;\r\n\/**\r\n&nbsp;*&nbsp;ClassName:&nbsp;BaseMessage\r\n&nbsp;*&nbsp;@Description:&nbsp;\u5fae\u4fe1\u8bf7\u6c42\u6d88\u606f\u57fa\u672c\u7c7b\r\n&nbsp;*&nbsp;@author&nbsp;dapengniao\r\n&nbsp;*&nbsp;@date&nbsp;2016\u5e743\u67087\u65e5&nbsp;\u4e0b\u53483:03:59\r\n&nbsp;*\/\r\npublic&nbsp;class&nbsp;BaseMessage&nbsp;{\r\n&nbsp;\/\/&nbsp;\u5f00\u53d1\u8005\u5fae\u4fe1\u53f7\r\n&nbsp;private&nbsp;String&nbsp;ToUserName;\r\n&nbsp;\/\/&nbsp;\u53d1\u9001\u65b9\u5e10\u53f7\uff08\u4e00\u4e2aOpenID\uff09\r\n&nbsp;private&nbsp;String&nbsp;FromUserName;\r\n&nbsp;\/\/&nbsp;\u6d88\u606f\u521b\u5efa\u65f6\u95f4&nbsp;\uff08\u6574\u578b\uff09\r\n&nbsp;private&nbsp;long&nbsp;CreateTime;\r\n&nbsp;\/\/&nbsp;\u6d88\u606f\u7c7b\u578b\uff08text\/image\/location\/link\/video\/shortvideo\uff09\r\n&nbsp;private&nbsp;String&nbsp;MsgType;\r\n&nbsp;\/\/&nbsp;\u6d88\u606fid\uff0c64\u4f4d\u6574\u578b\r\n&nbsp;private&nbsp;long&nbsp;MsgId;\r\n&nbsp;\r\n&nbsp;public&nbsp;String&nbsp;getToUserName()&nbsp;{\r\n&nbsp;&nbsp;return&nbsp;ToUserName;\r\n&nbsp;}\r\n&nbsp;\r\n&nbsp;public&nbsp;void&nbsp;setToUserName(String&nbsp;toUserName)&nbsp;{\r\n&nbsp;&nbsp;ToUserName&nbsp;=&nbsp;toUserName;\r\n&nbsp;}\r\n&nbsp;\r\n&nbsp;public&nbsp;String&nbsp;getFromUserName()&nbsp;{\r\n&nbsp;&nbsp;return&nbsp;FromUserName;\r\n&nbsp;}\r\n&nbsp;\r\n&nbsp;public&nbsp;void&nbsp;setFromUserName(String&nbsp;fromUserName)&nbsp;{\r\n&nbsp;&nbsp;FromUserName&nbsp;=&nbsp;fromUserName;\r\n&nbsp;}\r\n&nbsp;\r\n&nbsp;public&nbsp;long&nbsp;getCreateTime()&nbsp;{\r\n&nbsp;&nbsp;return&nbsp;CreateTime;\r\n&nbsp;}\r\n&nbsp;\r\n&nbsp;public&nbsp;void&nbsp;setCreateTime(long&nbsp;createTime)&nbsp;{\r\n&nbsp;&nbsp;CreateTime&nbsp;=&nbsp;createTime;\r\n&nbsp;}\r\n&nbsp;\r\n&nbsp;public&nbsp;String&nbsp;getMsgType()&nbsp;{\r\n&nbsp;&nbsp;return&nbsp;MsgType;\r\n&nbsp;}\r\n&nbsp;\r\n&nbsp;public&nbsp;void&nbsp;setMsgType(String&nbsp;msgType)&nbsp;{\r\n&nbsp;&nbsp;MsgType&nbsp;=&nbsp;msgType;\r\n&nbsp;}\r\n&nbsp;\r\n&nbsp;public&nbsp;long&nbsp;getMsgId()&nbsp;{\r\n&nbsp;&nbsp;return&nbsp;MsgId;\r\n&nbsp;}\r\n&nbsp;\r\n&nbsp;public&nbsp;void&nbsp;setMsgId(long&nbsp;msgId)&nbsp;{\r\n&nbsp;&nbsp;MsgId&nbsp;=&nbsp;msgId;\r\n&nbsp;}\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p><strong>\uff08\u4e8c\uff09\u666e\u901a\u6d88\u606fpojo\u5b9e\u4f53<\/strong><\/p>\n<p>\u2460\u56fe\u7247\u6d88\u606f<\/p>\n<p><span>\u7acb\u5373\u5b66\u4e60<\/span>\u201c\u201d\uff1b<\/p>\n<pre>package&nbsp;com.cuiyongzhi.wechat.message.req;\r\n&nbsp;\r\n\/**\r\n&nbsp;*&nbsp;ClassName:&nbsp;ImageMessage\r\n&nbsp;*&nbsp;@Description:&nbsp;\u56fe\u7247\u6d88\u606f\r\n&nbsp;*&nbsp;@author&nbsp;dapengniao\r\n&nbsp;*&nbsp;@date&nbsp;2016\u5e743\u67087\u65e5&nbsp;\u4e0b\u53483:04:52\r\n&nbsp;*\/\r\npublic&nbsp;class&nbsp;ImageMessage&nbsp;extends&nbsp;BaseMessage&nbsp;{\r\n&nbsp;\/\/&nbsp;\u56fe\u7247\u94fe\u63a5\r\n&nbsp;private&nbsp;String&nbsp;PicUrl;\r\n&nbsp;\r\n&nbsp;public&nbsp;String&nbsp;getPicUrl()&nbsp;{\r\n&nbsp;&nbsp;return&nbsp;PicUrl;\r\n&nbsp;}\r\n&nbsp;\r\n&nbsp;public&nbsp;void&nbsp;setPicUrl(String&nbsp;picUrl)&nbsp;{\r\n&nbsp;&nbsp;PicUrl&nbsp;=&nbsp;picUrl;\r\n&nbsp;}\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u2461\u8fde\u63a5\u6d88\u606f<\/p>\n<pre>package&nbsp;com.cuiyongzhi.wechat.message.req;\r\n&nbsp;\r\n\/**\r\n&nbsp;*&nbsp;ClassName:&nbsp;LinkMessage\r\n&nbsp;*&nbsp;@Description:&nbsp;\u8fde\u63a5\u6d88\u606f\r\n&nbsp;*&nbsp;@author&nbsp;dapengniao\r\n&nbsp;*&nbsp;@date&nbsp;2016\u5e743\u67087\u65e5&nbsp;\u4e0b\u53483:05:48\r\n&nbsp;*\/\r\npublic&nbsp;class&nbsp;LinkMessage&nbsp;extends&nbsp;BaseMessage&nbsp;{\r\n&nbsp;\/\/&nbsp;\u6d88\u606f\u6807\u9898\r\n&nbsp;private&nbsp;String&nbsp;Title;\r\n&nbsp;\/\/&nbsp;\u6d88\u606f\u63cf\u8ff0\r\n&nbsp;private&nbsp;String&nbsp;Description;\r\n&nbsp;\/\/&nbsp;\u6d88\u606f\u94fe\u63a5\r\n&nbsp;private&nbsp;String&nbsp;Url;\r\n&nbsp;\r\n&nbsp;public&nbsp;String&nbsp;getTitle()&nbsp;{\r\n&nbsp;&nbsp;return&nbsp;Title;\r\n&nbsp;}\r\n&nbsp;\r\n&nbsp;public&nbsp;void&nbsp;setTitle(String&nbsp;title)&nbsp;{\r\n&nbsp;&nbsp;Title&nbsp;=&nbsp;title;\r\n&nbsp;}\r\n&nbsp;\r\n&nbsp;public&nbsp;String&nbsp;getDescription()&nbsp;{\r\n&nbsp;&nbsp;return&nbsp;Description;\r\n&nbsp;}\r\n&nbsp;\r\n&nbsp;public&nbsp;void&nbsp;setDescription(String&nbsp;description)&nbsp;{\r\n&nbsp;&nbsp;Description&nbsp;=&nbsp;description;\r\n&nbsp;}\r\n&nbsp;\r\n&nbsp;public&nbsp;String&nbsp;getUrl()&nbsp;{\r\n&nbsp;&nbsp;return&nbsp;Url;\r\n&nbsp;}\r\n&nbsp;\r\n&nbsp;public&nbsp;void&nbsp;setUrl(String&nbsp;url)&nbsp;{\r\n&nbsp;&nbsp;Url&nbsp;=&nbsp;url;\r\n&nbsp;}\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u2462\u5730\u7406\u4f4d\u7f6e\u6d88\u606f<\/p>\n<pre>package&nbsp;com.cuiyongzhi.wechat.message.req;\r\n&nbsp;\r\n\/**\r\n&nbsp;*&nbsp;ClassName:&nbsp;LocationMessage\r\n&nbsp;*&nbsp;@Description:&nbsp;\u5730\u7406\u4f4d\u7f6e\u6d88\u606f\r\n&nbsp;*&nbsp;@author&nbsp;dapengniao\r\n&nbsp;*&nbsp;@date&nbsp;2016\u5e743\u67087\u65e5&nbsp;\u4e0b\u53483:06:10\r\n&nbsp;*\/\r\npublic&nbsp;class&nbsp;LocationMessage&nbsp;extends&nbsp;BaseMessage&nbsp;{&nbsp;\r\n&nbsp;\/\/&nbsp;\u5730\u7406\u4f4d\u7f6e\u7ef4\u5ea6&nbsp;\r\n&nbsp;private&nbsp;String&nbsp;Location_X;&nbsp;\r\n&nbsp;\/\/&nbsp;\u5730\u7406\u4f4d\u7f6e\u7ecf\u5ea6&nbsp;\r\n&nbsp;private&nbsp;String&nbsp;Location_Y;&nbsp;\r\n&nbsp;\/\/&nbsp;\u5730\u56fe\u7f29\u653e\u5927\u5c0f&nbsp;\r\n&nbsp;private&nbsp;String&nbsp;Scale;&nbsp;\r\n&nbsp;\/\/&nbsp;\u5730\u7406\u4f4d\u7f6e\u4fe1\u606f&nbsp;\r\n&nbsp;private&nbsp;String&nbsp;Label;&nbsp;\r\n&nbsp;public&nbsp;String&nbsp;getLocation_X()&nbsp;{&nbsp;\r\n&nbsp;&nbsp;return&nbsp;Location_X;&nbsp;\r\n&nbsp;}&nbsp;\r\n&nbsp;public&nbsp;void&nbsp;setLocation_X(String&nbsp;location_X)&nbsp;{&nbsp;\r\n&nbsp;&nbsp;Location_X&nbsp;=&nbsp;location_X;&nbsp;\r\n&nbsp;}&nbsp;\r\n&nbsp;public&nbsp;String&nbsp;getLocation_Y()&nbsp;{&nbsp;\r\n&nbsp;&nbsp;return&nbsp;Location_Y;&nbsp;\r\n&nbsp;}&nbsp;\r\n&nbsp;public&nbsp;void&nbsp;setLocation_Y(String&nbsp;location_Y)&nbsp;{&nbsp;\r\n&nbsp;&nbsp;Location_Y&nbsp;=&nbsp;location_Y;&nbsp;\r\n&nbsp;}&nbsp;\r\n&nbsp;public&nbsp;String&nbsp;getScale()&nbsp;{&nbsp;\r\n&nbsp;&nbsp;return&nbsp;Scale;&nbsp;\r\n&nbsp;}&nbsp;\r\n&nbsp;public&nbsp;void&nbsp;setScale(String&nbsp;scale)&nbsp;{&nbsp;\r\n&nbsp;&nbsp;Scale&nbsp;=&nbsp;scale;&nbsp;\r\n&nbsp;}&nbsp;\r\n&nbsp;public&nbsp;String&nbsp;getLabel()&nbsp;{&nbsp;\r\n&nbsp;&nbsp;return&nbsp;Label;&nbsp;\r\n&nbsp;}&nbsp;\r\n&nbsp;public&nbsp;void&nbsp;setLabel(String&nbsp;label)&nbsp;{&nbsp;\r\n&nbsp;&nbsp;Label&nbsp;=&nbsp;label;&nbsp;\r\n&nbsp;}&nbsp;\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u2463\u6587\u672c\u6d88\u606f<\/p>\n<pre>package&nbsp;com.cuiyongzhi.wechat.message.req;\r\n&nbsp;\r\n\/**\r\n&nbsp;*&nbsp;ClassName:&nbsp;TextMessage\r\n&nbsp;*&nbsp;@Description:&nbsp;\u6587\u672c\u6d88\u606f\r\n&nbsp;*&nbsp;@author&nbsp;dapengniao\r\n&nbsp;*&nbsp;@date&nbsp;2016\u5e743\u67087\u65e5&nbsp;\u4e0b\u53483:06:40\r\n&nbsp;*\/\r\npublic&nbsp;class&nbsp;TextMessage&nbsp;extends&nbsp;BaseMessage&nbsp;{&nbsp;\r\n&nbsp;\/\/&nbsp;\u6d88\u606f\u5185\u5bb9&nbsp;\r\n&nbsp;private&nbsp;String&nbsp;Content;&nbsp;\r\n&nbsp;public&nbsp;String&nbsp;getContent()&nbsp;{&nbsp;\r\n&nbsp;&nbsp;return&nbsp;Content;&nbsp;\r\n&nbsp;}&nbsp;\r\n&nbsp;public&nbsp;void&nbsp;setContent(String&nbsp;content)&nbsp;{&nbsp;\r\n&nbsp;&nbsp;Content&nbsp;=&nbsp;content;&nbsp;\r\n&nbsp;}&nbsp;\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u2464\u89c6\u9891\/\u5c0f\u89c6\u5c4f\u6d88\u606f<\/p>\n<pre>package&nbsp;com.cuiyongzhi.wechat.message.req;\r\n&nbsp;\r\n\/**\r\n&nbsp;*&nbsp;ClassName:&nbsp;VideoMessage\r\n&nbsp;*&nbsp;@Description:&nbsp;\u89c6\u9891\/\u5c0f\u89c6\u5c4f\u6d88\u606f\r\n&nbsp;*&nbsp;@author&nbsp;dapengniao\r\n&nbsp;*&nbsp;@date&nbsp;2016\u5e743\u67087\u65e5&nbsp;\u4e0b\u53483:12:51\r\n&nbsp;*\/\r\npublic&nbsp;class&nbsp;VideoMessage&nbsp;extends&nbsp;BaseMessage&nbsp;{\r\n&nbsp;private&nbsp;String&nbsp;MediaId;&nbsp;\/\/&nbsp;\u89c6\u9891\u6d88\u606f\u5a92\u4f53id\uff0c\u53ef\u4ee5\u8c03\u7528\u591a\u5a92\u4f53\u6587\u4ef6\u4e0b\u8f7d\u63a5\u53e3\u62c9\u53d6\u6570\u636e\r\n&nbsp;private&nbsp;String&nbsp;ThumbMediaId;&nbsp;\/\/&nbsp;\u89c6\u9891\u6d88\u606f\u7f29\u7565\u56fe\u7684\u5a92\u4f53id\uff0c\u53ef\u4ee5\u8c03\u7528\u591a\u5a92\u4f53\u6587\u4ef6\u4e0b\u8f7d\u63a5\u53e3\u62c9\u53d6\u6570\u636e\r\n&nbsp;public&nbsp;String&nbsp;getMediaId()&nbsp;{\r\n&nbsp;&nbsp;return&nbsp;MediaId;\r\n&nbsp;}\r\n&nbsp;public&nbsp;void&nbsp;setMediaId(String&nbsp;mediaId)&nbsp;{\r\n&nbsp;&nbsp;MediaId&nbsp;=&nbsp;mediaId;\r\n&nbsp;}\r\n&nbsp;public&nbsp;String&nbsp;getThumbMediaId()&nbsp;{\r\n&nbsp;&nbsp;return&nbsp;ThumbMediaId;\r\n&nbsp;}\r\n&nbsp;public&nbsp;void&nbsp;setThumbMediaId(String&nbsp;thumbMediaId)&nbsp;{\r\n&nbsp;&nbsp;ThumbMediaId&nbsp;=&nbsp;thumbMediaId;\r\n&nbsp;}\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u2465\u8bed\u97f3\u6d88\u606f<\/p>\n<pre>package&nbsp;com.cuiyongzhi.wechat.message.req;\r\n\/**\r\n&nbsp;*&nbsp;ClassName:&nbsp;VoiceMessage\r\n&nbsp;*&nbsp;@Description:&nbsp;\u8bed\u97f3\u6d88\u606f\r\n&nbsp;*&nbsp;@author&nbsp;dapengniao\r\n&nbsp;*&nbsp;@date&nbsp;2016\u5e743\u67087\u65e5&nbsp;\u4e0b\u53483:07:10\r\n&nbsp;*\/\r\npublic&nbsp;class&nbsp;VoiceMessage&nbsp;extends&nbsp;BaseMessage&nbsp;{&nbsp;\r\n&nbsp;\/\/&nbsp;\u5a92\u4f53ID&nbsp;\r\n&nbsp;private&nbsp;String&nbsp;MediaId;&nbsp;\r\n&nbsp;\/\/&nbsp;\u8bed\u97f3\u683c\u5f0f&nbsp;\r\n&nbsp;private&nbsp;String&nbsp;Format;&nbsp;\r\n&nbsp;\r\n&nbsp;public&nbsp;String&nbsp;getMediaId()&nbsp;{&nbsp;\r\n&nbsp;&nbsp;return&nbsp;MediaId;&nbsp;\r\n&nbsp;}&nbsp;\r\n&nbsp;public&nbsp;void&nbsp;setMediaId(String&nbsp;mediaId)&nbsp;{&nbsp;\r\n&nbsp;&nbsp;MediaId&nbsp;=&nbsp;mediaId;&nbsp;\r\n&nbsp;}&nbsp;\r\n&nbsp;public&nbsp;String&nbsp;getFormat()&nbsp;{&nbsp;\r\n&nbsp;&nbsp;return&nbsp;Format;&nbsp;\r\n&nbsp;}&nbsp;\r\n&nbsp;public&nbsp;void&nbsp;setFormat(String&nbsp;format)&nbsp;{&nbsp;\r\n&nbsp;&nbsp;Format&nbsp;=&nbsp;format;&nbsp;\r\n&nbsp;}&nbsp;\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p><strong>\uff08\u4e09\uff09\u6d88\u606f\u5206\u7c7b\u5904\u7406<\/strong><\/p>\n<p>\u6309\u7167\u4e0a\u9762\u6536\u5230\u60f3\u6d88\u606f\u7c7b\u522b\u5206\u522b\u505a\u4e0d\u540c\u7684\u5206\u53d1\u5904\u7406\uff0c\u8fd9\u91cc\u6211\u4eec\u5efa\u7acb\u4e86\u81ea\u5df1\u7684\u4e1a\u52a1\u5206\u53d1\u5668\uff08EventDispatcher\u3001MsgDispatcher\uff09\uff0c\u5206\u522b\u505a\u666e\u901a\u6d88\u606f\u5904\u7406\u548c\u4e8b\u4ef6\u6d88\u606f\u5904\u7406\uff01<\/p>\n<p>\u2460MsgDispatcher.java\u2014\u2014\u7528\u4e8e\u666e\u901a\u6d88\u606f\u7684\u4e1a\u52a1\u5206\u53d1\u5904\u7406<\/p>\n<pre>package&nbsp;com.cuiyongzhi.wechat.dispatcher;\r\nimport&nbsp;java.util.Map;\r\nimport&nbsp;com.cuiyongzhi.wechat.util.MessageUtil;\r\n\/**\r\n&nbsp;*&nbsp;ClassName:&nbsp;MsgDispatcher\r\n&nbsp;*&nbsp;@Description:&nbsp;\u6d88\u606f\u4e1a\u52a1\u5904\u7406\u5206\u53d1\u5668\r\n&nbsp;*&nbsp;@author&nbsp;dapengniao\r\n&nbsp;*&nbsp;@date&nbsp;2016\u5e743\u67087\u65e5&nbsp;\u4e0b\u53484:04:21\r\n&nbsp;*\/\r\npublic&nbsp;class&nbsp;MsgDispatcher&nbsp;{\r\n&nbsp;public&nbsp;static&nbsp;String&nbsp;processMessage(Map&lt;string&gt;&nbsp;map)&nbsp;{\r\n&nbsp;&nbsp;if&nbsp;(map.get(\"MsgType\").equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT))&nbsp;{&nbsp;\/\/&nbsp;\u6587\u672c\u6d88\u606f\r\n&nbsp;&nbsp;&nbsp;System.out.println(\"==============\u8fd9\u662f\u6587\u672c\u6d88\u606f\uff01\");\r\n&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;if&nbsp;(map.get(\"MsgType\").equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE))&nbsp;{&nbsp;\/\/&nbsp;\u56fe\u7247\u6d88\u606f\r\n&nbsp;&nbsp;&nbsp;System.out.println(\"==============\u8fd9\u662f\u56fe\u7247\u6d88\u606f\uff01\");\r\n&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;if&nbsp;(map.get(\"MsgType\").equals(MessageUtil.REQ_MESSAGE_TYPE_LINK))&nbsp;{&nbsp;\/\/&nbsp;\u94fe\u63a5\u6d88\u606f\r\n&nbsp;&nbsp;&nbsp;System.out.println(\"==============\u8fd9\u662f\u94fe\u63a5\u6d88\u606f\uff01\");\r\n&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;if&nbsp;(map.get(\"MsgType\").equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION))&nbsp;{&nbsp;\/\/&nbsp;\u4f4d\u7f6e\u6d88\u606f\r\n&nbsp;&nbsp;&nbsp;System.out.println(\"==============\u8fd9\u662f\u4f4d\u7f6e\u6d88\u606f\uff01\");\r\n&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;if&nbsp;(map.get(\"MsgType\").equals(MessageUtil.REQ_MESSAGE_TYPE_VIDEO))&nbsp;{&nbsp;\/\/&nbsp;\u89c6\u9891\u6d88\u606f\r\n&nbsp;&nbsp;&nbsp;System.out.println(\"==============\u8fd9\u662f\u89c6\u9891\u6d88\u606f\uff01\");\r\n&nbsp;&nbsp;}&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;if&nbsp;(map.get(\"MsgType\").equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE))&nbsp;{&nbsp;\/\/&nbsp;\u8bed\u97f3\u6d88\u606f\r\n&nbsp;&nbsp;&nbsp;System.out.println(\"==============\u8fd9\u662f\u8bed\u97f3\u6d88\u606f\uff01\");\r\n&nbsp;&nbsp;}\r\n&nbsp;\r\n&nbsp;&nbsp;return&nbsp;null;\r\n&nbsp;}\r\n}&lt;\/string&gt;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u2461EventDispatcher.java\u2014\u2014\u4e8b\u4ef6\u6d88\u606f\u7684\u4e1a\u52a1\u5206\u53d1\u5904\u7406<\/p>\n<pre>package&nbsp;com.cuiyongzhi.wechat.dispatcher;\r\n&nbsp;\r\nimport&nbsp;java.util.Map;\r\n&nbsp;\r\nimport&nbsp;com.cuiyongzhi.wechat.util.MessageUtil;\r\n&nbsp;\r\n\/**\r\n&nbsp;*&nbsp;ClassName:&nbsp;EventDispatcher\r\n&nbsp;*&nbsp;@Description:&nbsp;\u4e8b\u4ef6\u6d88\u606f\u4e1a\u52a1\u5206\u53d1\u5668\r\n&nbsp;*&nbsp;@author&nbsp;dapengniao\r\n&nbsp;*&nbsp;@date&nbsp;2016\u5e743\u67087\u65e5&nbsp;\u4e0b\u53484:04:41\r\n&nbsp;*\/\r\npublic&nbsp;class&nbsp;EventDispatcher&nbsp;{\r\n&nbsp;public&nbsp;static&nbsp;String&nbsp;processEvent(Map&lt;string&gt;&nbsp;map)&nbsp;{\r\n&nbsp;&nbsp;if&nbsp;(map.get(\"Event\").equals(MessageUtil.EVENT_TYPE_SUBSCRIBE))&nbsp;{&nbsp;\/\/\u5173\u6ce8\u4e8b\u4ef6\r\n&nbsp;&nbsp;&nbsp;System.out.println(\"==============\u8fd9\u662f\u5173\u6ce8\u4e8b\u4ef6\uff01\");\r\n&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;if&nbsp;(map.get(\"Event\").equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE))&nbsp;{&nbsp;\/\/\u53d6\u6d88\u5173\u6ce8\u4e8b\u4ef6\r\n&nbsp;&nbsp;&nbsp;System.out.println(\"==============\u8fd9\u662f\u53d6\u6d88\u5173\u6ce8\u4e8b\u4ef6\uff01\");\r\n&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;if&nbsp;(map.get(\"Event\").equals(MessageUtil.EVENT_TYPE_SCAN))&nbsp;{&nbsp;\/\/\u626b\u63cf\u4e8c\u7ef4\u7801\u4e8b\u4ef6\r\n&nbsp;&nbsp;&nbsp;System.out.println(\"==============\u8fd9\u662f\u626b\u63cf\u4e8c\u7ef4\u7801\u4e8b\u4ef6\uff01\");\r\n&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;if&nbsp;(map.get(\"Event\").equals(MessageUtil.EVENT_TYPE_LOCATION))&nbsp;{&nbsp;\/\/\u4f4d\u7f6e\u4e0a\u62a5\u4e8b\u4ef6\r\n&nbsp;&nbsp;&nbsp;System.out.println(\"==============\u8fd9\u662f\u4f4d\u7f6e\u4e0a\u62a5\u4e8b\u4ef6\uff01\");\r\n&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;if&nbsp;(map.get(\"Event\").equals(MessageUtil.EVENT_TYPE_CLICK))&nbsp;{&nbsp;\/\/\u81ea\u5b9a\u4e49\u83dc\u5355\u70b9\u51fb\u4e8b\u4ef6\r\n&nbsp;&nbsp;&nbsp;System.out.println(\"==============\u8fd9\u662f\u81ea\u5b9a\u4e49\u83dc\u5355\u70b9\u51fb\u4e8b\u4ef6\uff01\");\r\n&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;if&nbsp;(map.get(\"Event\").equals(MessageUtil.EVENT_TYPE_VIEW))&nbsp;{&nbsp;\/\/\u81ea\u5b9a\u4e49\u83dc\u5355View\u4e8b\u4ef6\r\n&nbsp;&nbsp;&nbsp;System.out.println(\"==============\u8fd9\u662f\u81ea\u5b9a\u4e49\u83dc\u5355View\u4e8b\u4ef6\uff01\");\r\n&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;return&nbsp;null;\r\n&nbsp;}\r\n}&lt;\/string&gt;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u8fd9\u4e2a\u65f6\u5019\u6211\u4eec\u9700\u8981\u628a\u6211\u4eec\u7684\u6d88\u606f\u5165\u53e3\u3010WechatSecurity.java\u3011\u4e2d\u7684post\u65b9\u6cd5\u505a\u4e9b\u4fee\u6539\uff0c\u6700\u7ec8\u7ed3\u679c\u5982\u4e0b\uff1a<\/p>\n<pre>package&nbsp;com.cuiyongzhi.wechat.controller;\r\n&nbsp;\r\nimport&nbsp;java.io.PrintWriter;\r\nimport&nbsp;java.util.Map;\r\n&nbsp;\r\nimport&nbsp;javax.servlet.http.HttpServletRequest;\r\nimport&nbsp;javax.servlet.http.HttpServletResponse;\r\n&nbsp;\r\nimport&nbsp;org.apache.log4j.Logger;\r\nimport&nbsp;org.springframework.stereotype.Controller;\r\nimport&nbsp;org.springframework.web.bind.annotation.RequestMapping;\r\nimport&nbsp;org.springframework.web.bind.annotation.RequestMethod;\r\nimport&nbsp;org.springframework.web.bind.annotation.RequestParam;\r\n&nbsp;\r\nimport&nbsp;com.cuiyongzhi.wechat.dispatcher.EventDispatcher;\r\nimport&nbsp;com.cuiyongzhi.wechat.dispatcher.MsgDispatcher;\r\nimport&nbsp;com.cuiyongzhi.wechat.util.MessageUtil;\r\nimport&nbsp;com.cuiyongzhi.wechat.util.SignUtil;\r\n&nbsp;\r\n@Controller\r\n@RequestMapping(\"\/wechat\")\r\npublic&nbsp;class&nbsp;WechatSecurity&nbsp;{\r\n&nbsp;private&nbsp;static&nbsp;Logger&nbsp;logger&nbsp;=&nbsp;Logger.getLogger(WechatSecurity.class);\r\n&nbsp;\r\n&nbsp;\/**\r\n&nbsp;&nbsp;*&nbsp;\r\n&nbsp;&nbsp;*&nbsp;@Description:&nbsp;\u7528\u4e8e\u63a5\u6536get\u53c2\u6570\uff0c\u8fd4\u56de\u9a8c\u8bc1\u53c2\u6570\r\n&nbsp;&nbsp;*&nbsp;@param&nbsp;@param&nbsp;request\r\n&nbsp;&nbsp;*&nbsp;@param&nbsp;@param&nbsp;response\r\n&nbsp;&nbsp;*&nbsp;@param&nbsp;@param&nbsp;signature\r\n&nbsp;&nbsp;*&nbsp;@param&nbsp;@param&nbsp;timestamp\r\n&nbsp;&nbsp;*&nbsp;@param&nbsp;@param&nbsp;nonce\r\n&nbsp;&nbsp;*&nbsp;@param&nbsp;@param&nbsp;echostr\r\n&nbsp;&nbsp;*&nbsp;@author&nbsp;dapengniao\r\n&nbsp;&nbsp;*&nbsp;@date&nbsp;2016\u5e743\u67084\u65e5&nbsp;\u4e0b\u53486:20:00\r\n&nbsp;&nbsp;*\/\r\n&nbsp;@RequestMapping(value&nbsp;=&nbsp;\"security\",&nbsp;method&nbsp;=&nbsp;RequestMethod.GET)\r\n&nbsp;public&nbsp;void&nbsp;doGet(\r\n&nbsp;&nbsp;&nbsp;HttpServletRequest&nbsp;request,\r\n&nbsp;&nbsp;&nbsp;HttpServletResponse&nbsp;response,\r\n&nbsp;&nbsp;&nbsp;@RequestParam(value&nbsp;=&nbsp;\"signature\",&nbsp;required&nbsp;=&nbsp;true)&nbsp;String&nbsp;signature,\r\n&nbsp;&nbsp;&nbsp;@RequestParam(value&nbsp;=&nbsp;\"timestamp\",&nbsp;required&nbsp;=&nbsp;true)&nbsp;String&nbsp;timestamp,\r\n&nbsp;&nbsp;&nbsp;@RequestParam(value&nbsp;=&nbsp;\"nonce\",&nbsp;required&nbsp;=&nbsp;true)&nbsp;String&nbsp;nonce,\r\n&nbsp;&nbsp;&nbsp;@RequestParam(value&nbsp;=&nbsp;\"echostr\",&nbsp;required&nbsp;=&nbsp;true)&nbsp;String&nbsp;echostr)&nbsp;{\r\n&nbsp;&nbsp;try&nbsp;{\r\n&nbsp;&nbsp;&nbsp;if&nbsp;(SignUtil.checkSignature(signature,&nbsp;timestamp,&nbsp;nonce))&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;PrintWriter&nbsp;out&nbsp;=&nbsp;response.getWriter();\r\n&nbsp;&nbsp;&nbsp;&nbsp;out.print(echostr);\r\n&nbsp;&nbsp;&nbsp;&nbsp;out.close();\r\n&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;logger.info(\"\u8fd9\u91cc\u5b58\u5728\u975e\u6cd5\u8bf7\u6c42\uff01\");\r\n&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;logger.error(e,&nbsp;e);\r\n&nbsp;&nbsp;}\r\n&nbsp;}\r\n&nbsp;\r\n&nbsp;\/**\r\n&nbsp;&nbsp;*&nbsp;@Description:&nbsp;\u63a5\u6536\u5fae\u4fe1\u7aef\u6d88\u606f\u5904\u7406\u5e76\u505a\u5206\u53d1\r\n&nbsp;&nbsp;*&nbsp;@param&nbsp;@param&nbsp;request\r\n&nbsp;&nbsp;*&nbsp;@param&nbsp;@param&nbsp;response&nbsp;\r\n&nbsp;&nbsp;*&nbsp;@author&nbsp;dapengniao\r\n&nbsp;&nbsp;*&nbsp;@date&nbsp;2016\u5e743\u67087\u65e5&nbsp;\u4e0b\u53484:06:47\r\n&nbsp;&nbsp;*\/\r\n&nbsp;@RequestMapping(value&nbsp;=&nbsp;\"security\",&nbsp;method&nbsp;=&nbsp;RequestMethod.POST)\r\n&nbsp;public&nbsp;void&nbsp;DoPost(HttpServletRequest&nbsp;request,HttpServletResponse&nbsp;response)&nbsp;{\r\n&nbsp;&nbsp;try{\r\n&nbsp;&nbsp;&nbsp;Map&lt;string&gt;&nbsp;map=MessageUtil.parseXml(request);\r\n&nbsp;&nbsp;&nbsp;String&nbsp;msgtype=map.get(\"MsgType\");\r\n&nbsp;&nbsp;&nbsp;if(MessageUtil.REQ_MESSAGE_TYPE_EVENT.equals(msgtype)){\r\n&nbsp;&nbsp;&nbsp;&nbsp;EventDispatcher.processEvent(map);&nbsp;\/\/\u8fdb\u5165\u4e8b\u4ef6\u5904\u7406\r\n&nbsp;&nbsp;&nbsp;}else{\r\n&nbsp;&nbsp;&nbsp;&nbsp;MsgDispatcher.processMessage(map);&nbsp;\/\/\u8fdb\u5165\u6d88\u606f\u5904\u7406\r\n&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;}catch(Exception&nbsp;e){\r\n&nbsp;&nbsp;&nbsp;logger.error(e,e);\r\n&nbsp;&nbsp;}\r\n&nbsp;}\r\n}&lt;\/string&gt;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u6700\u540e\u6211\u4eec\u8fd0\u884c\u6210\u529f\u9879\u76ee\u4e4b\u540e\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u53d1\u9001\u4e0d\u540c\u7c7b\u578b\u7684\u6d88\u606f\u6765\u9a8c\u8bc1\u6211\u4eec\u7684\u6d88\u606f\u5206\u7c7b\u7684\u6b63\u786e\u6027\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a<\/p>\n<p style=\"text-align: center\"><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/001\/505\/878d525afb92aa72547d1ce5bbf64424-0.jpg\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5206\u7c7b\u63a5\u6536\u6d88\u606f\u4ee5\u53ca\u521b\u5efa\u5b9e\u4f53\u7684java\u4ee3\u7801\u5b9e\u4f8b\u63d2\u56fe\" alt=\"\u5fae\u4fe1\u5206\u7c7b\u63a5\u6536\u6d88\u606f\u4ee5\u53ca\u521b\u5efa\u5b9e\u4f53\u7684java\u4ee3\u7801\u5b9e\u4f8b\u63d2\u56fe\" \/><\/p>\n<p style=\"text-align: left\">\u65b0\u5efa\u4e86\u8fd9\u4e48\u591a\u6587\u4ef6\uff0c\u6700\u540e\u6765\u770b\u4e0b\u6211\u4eec\u7684\u6574\u4e2a\u9879\u76ee\u7684\u76ee\u5f55\u7ed3\u6784\uff1a<\/p>\n<p style=\"text-align: center\"><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/001\/505\/d05e9e1904a3fec39858eef2948af59d-1.jpg\" class=\"aligncenter\" title=\"\u5fae\u4fe1\u5206\u7c7b\u63a5\u6536\u6d88\u606f\u4ee5\u53ca\u521b\u5efa\u5b9e\u4f53\u7684java\u4ee3\u7801\u5b9e\u4f8b\u63d2\u56fe1\" alt=\"\u5fae\u4fe1\u5206\u7c7b\u63a5\u6536\u6d88\u606f\u4ee5\u53ca\u521b\u5efa\u5b9e\u4f53\u7684java\u4ee3\u7801\u5b9e\u4f8b\u63d2\u56fe1\" \/><\/p>\n<p>\u4ee5\u4e0a\u5c31\u662f\u5fae\u4fe1\u5206\u7c7b\u63a5\u6536\u6d88\u606f\u4ee5\u53ca\u521b\u5efa\u5b9e\u4f53\u7684java\u4ee3\u7801\u5b9e\u4f8b\u7684\u8be6\u7ec6\u5185\u5bb9\uff0c\u66f4\u591a\u8bf7\u5173\u6ce8\u7c73\u4e91\u5176\u5b83\u76f8\u5173\u6587\u7ae0\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u4e3b\u8981\u4e3a\u5927\u5bb6\u8be6\u7ec6\u4ecb\u7ecd\u4e86java\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u5f00\u53d1\u7b2c\u4e09\u6b65\uff0c\u63a5\u6536\u6d88\u606f\u7684\u5206\u7c7b\u53ca\u5b9e\u4f53\u7684\u521b\u5efa\uff0c\u5177\u6709\u4e00\u5b9a\u7684\u53c2\u8003\u4ef7\u503c\uff0c\u611f\u5174\u8da3\u7684\u5c0f\u4f19\u4f34\u4eec\u53ef\u4ee5\u53c2\u8003\u4e00\u4e0b \u524d\u9762\u4e00\u7bc7\u6709\u8bf4\u9053\u5e94\u7528\u670d\u52a1\u5668\u548c\u817e\u8baf\u670d\u52a1\u5668\u662f\u901a\u8fc7\u6d88\u606f\u8fdb\u884c\u901a\u8baf\u7684\uff0c\u5e76\u7b80\u5355\u4ecb\u7ecd\u4e86\u5fae\u4fe1\u7aefpost\u7684\u6d88\u606f\u7c7b\u578b\uff0c\u8fd9\u91cc\u6211\u4eec\u5c06\u5efa\u7acb\u6d88\u606f\u5b9e\u4f53\u4ee5\u65b9\u4fbf\u6211\u4eec\u540e\u9762\u7684\u4f7f\u7528\uff01 \uff08\u4e00\uff09\u6d88\u606f\u5b9e\u4f53\u57fa\u7840\u7c7b package&nbsp;com.cuiyongzhi.wechat.message.req; \/** &nbsp;*&nbsp;ClassName:&nbsp;BaseMessage &nbsp;*&nbsp;@Description:&nbsp;\u5fae\u4fe1\u8bf7\u6c42\u6d88\u606f\u57fa\u672c\u7c7b &nbsp;*&nbsp;@author&nbsp;dapengniao &nbsp;*&nbsp;@date&nbsp;2016\u5e743\u67087\u65e5&nbsp;\u4e0b\u53483:03:59 &nbsp;*\/ public&nbsp;class&nbsp;BaseMessage&nbsp;{ &nbsp;\/\/&nbsp;\u5f00\u53d1\u8005\u5fae\u4fe1\u53f7 &nbsp;private&nbsp;String&nbsp;ToUserName; &nbsp;\/\/&nbsp;\u53d1\u9001\u65b9\u5e10\u53f7\uff08\u4e00\u4e2aOpenID\uff09 &nbsp;private&nbsp;String&nbsp;FromUserName; &nbsp;\/\/&nbsp;\u6d88\u606f\u521b\u5efa\u65f6\u95f4&nbsp;\uff08\u6574\u578b\uff09 &nbsp;private&nbsp;long&nbsp;CreateTime; &nbsp;\/\/&nbsp;\u6d88\u606f\u7c7b\u578b\uff08text\/image\/location\/link\/video\/shortvideo\uff09 &nbsp;private&nbsp;String&nbsp;MsgType; &nbsp;\/\/&nbsp;\u6d88\u606fid\uff0c64\u4f4d\u6574\u578b &nbsp;private&nbsp;long&nbsp;MsgId; &nbsp; &nbsp;public&nbsp;String&nbsp;getToUserName()&nbsp;{ &nbsp;&nbsp;return&nbsp;ToUserName; &nbsp;} &nbsp; &nbsp;public&nbsp;void&nbsp;setToUserName(String&nbsp;toUserName)&nbsp;{ &nbsp;&nbsp;ToUserName&nbsp;=&nbsp;toUserName; &nbsp;} &nbsp; &nbsp;public&nbsp;String&nbsp;getFromUserName()&nbsp;{ &nbsp;&nbsp;return&nbsp;FromUserName; &nbsp;} &nbsp; &nbsp;public&nbsp;void&nbsp;setFromUserName(String&nbsp;fromUserName)&nbsp;{ &nbsp;&nbsp;FromUserName&nbsp;=&nbsp;fromUserName; &nbsp;} &nbsp; &nbsp;public&nbsp;long&nbsp;getCreateTime()&nbsp;{ &nbsp;&nbsp;return&nbsp;CreateTime; &nbsp;} &nbsp; &nbsp;public&nbsp;void&nbsp;setCreateTime(long&nbsp;createTime)&nbsp;{ &nbsp;&nbsp;CreateTime&nbsp;=&nbsp;createTime; &nbsp;} &nbsp; &nbsp;public&nbsp;String&nbsp;getMsgType()&nbsp;{ &nbsp;&nbsp;return&nbsp;MsgType; &nbsp;} &nbsp; &nbsp;public&nbsp;void&nbsp;setMsgType(String&nbsp;msgType)&nbsp;{ &nbsp;&nbsp;MsgType&nbsp;=&nbsp;msgType; &nbsp;} &nbsp; &nbsp;public&nbsp;long&nbsp;getMsgId()&nbsp;{ [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-29958","post","type-post","status-publish","format-standard","hentry","category-19"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/29958","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/comments?post=29958"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/29958\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=29958"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=29958"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=29958"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}