第二部分——消息推送服务
类型一:接受普通消息
类型二:接受事件消息
类型三:发送被动响应
项目树图。
注意:这个部分所用到的jar包有fastjson-1.2.47.jar(版本自定义,本人用的1.2.47)
一、接受普通消息
1、纯文本类型私信和留言消息:text
{ "type": "text", "receiver_id": 1902538057, "sender_id": 2489518277, "created_at": "Mon Jul 16 18:09:20 +0800 2012", "text": "私信或留言内容", "data": {} } |
||
返回值说明 |
||
属性 |
值的类型 |
说明描述 |
type |
string |
text |
receiver_id |
int64 |
消息的接收者 |
sender_id |
int64 |
消息的发送者 |
created_at |
string |
消息创建时间 |
text |
string |
私信内容 |
data |
string |
消息内容,纯文本私信或留言为空 |
当用户向微博服务器发送消息,微博消息会推送到开发者填写的URL地址上(json),所以URL会返回一个json的数据包,获取消息就是将消息从该个json的数据包中提取出来。下边就在cn.json.weibo包下新建一个名位RequestMethod的java文件,该个类的作用是获取request返回的数据,代码具体内容如下:
①RequestMethod.java
1. package cn.json.weibo;
2.
3. public class RequestMethod {
4. /**
5. * 获取request返回的JSON字符串数据包
6. */
7. public static String getRequestJSON(HttpServletRequest request) throws IOException {
8. String submitMehtod = request.getMethod();
9. //判断request返回的方式是GET 还是 POST
10. if (submitMehtod.equals("GET")) {
11. return new String(request.getQueryString().getBytes("iso-8859-1"),"utf-8").replaceAll("%22", "\"");
12. } else {
13. return getRequestPost(request);
14. }
15. }
16. /**
17. * 获取POST 请求内容 ,并且返回一个字符串
18. */
19. public static String getRequestPost(HttpServletRequest request)throws IOException {
20. byte buffer[] = getRequestPostBytes(request);
21. String charEncoding = request.getCharacterEncoding();
22. if (charEncoding == null) {
23. charEncoding = "UTF-8";
24. }
25. return new String(buffer, charEncoding);
26. }
27. /**
28. * 获取 POST 请求的 byte[] 数组
29. */
30. public static byte[] getRequestPostBytes(HttpServletRequest request)throws IOException {
31. int contentLength = request.getContentLength();
32. if(contentLength<0){
33. return null;
34. }
35. byte buffer[] = new byte[contentLength];
36. for (int i = 0; i < contentLength;) {
37. int readlen = request.getInputStream().read(buffer, i, contentLength - i);
38. if (readlen == -1) {
39. break;
40. }
41. i += readlen;
42. }
43. return buffer;
44. }
45. }
②WeiBo.java下doPost方法内容如下:
1. public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
2. //设定字符集
3. request.setCharacterEncoding("UTF-8");
4. response.setCharacterEncoding("UTF-8");
5. PrintWriter out = response.getWriter();
6. //获取返回的数据
7. String requestJSON = RequestMethod.getRequestJSON(request);
8. System.out.println(requestJSON);
9. //将JSON字符串转换为集合
10. Map<?, ?> map = JSON.parseObject(requestJSON);
11. //获取字段为receiver_id的内容
12. String receiver_id = map.get("receiver_id").toString();
13. String sender_id = map.get("sender_id").toString();
14. String type = map.get("type").toString();
15. String text = map.get("text").toString();
16. }
2、位置类型私信消息:position
{ "type": "position", "receiver_id": 1902538057, "sender_id": 2489518277, "created_at": "Mon Jul 16 18:09:20 +0800 2012", "text": "我在这里: http://t.cn/zQgLLYO", "data": { |