你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Web开发
基于fastjson的微信模板消息的封装与实现
 

导读:本文根据微信模板消息的所要求的json字符串,封装成java类,并利用fastjson的toJSONString将java对象转换成对应的消息格式

一、添加fastjson到项目中
在pom.xml中加入

<dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>fastjson</artifactId>
 <version>1.2.13</version>
</dependency>
二、微信模板消息的格式
微信的模板消息是根据申请的格式不同而不同,但是它们都可以被抽象成下面的格式:

template_id:对应微信后台申请的模板id
topcolor:消息顶部字体的颜色
touser:发往目标用户的openId
url:点击该消息的跳转链接地址
data:对应模板所携带的数据信息,不同的格式就提现在这个data的不同
下面是一个请求消息的json字符串,我们着重注意data域的数据格式,里面包含name和remark两个属性,而每个属性的值都是由color和value组成。

{"data":{"name":{"color":"#173177","value":"itradar"},
"remark":{"color":"#173177","value":"sucess!"}},
"template_id":"0vpDGpy7AJ-0MkT-i9c_xwgVCvIs8ot2VAoynx_m704",
"topcolor":"#FF0000","touser":"8899","url":"https://www.yourdomain.com"}
三、java实现
1、模板消息基类的定义

由于任何消息都能抽象为上面的5个属性,因此可以将定义一个java基类,如下:

package com.template.dao.domain;
 
import java.util.HashMap;
import java.util.Map;
 
public class WXTemplateMsgBase {
    public String getTouser() {
        return touser;
    }
 
    public void setTouser(String touser) {
        this.touser = touser;
    }
 
    public String getTemplate_id() {
        return template_id;
    }
 
    public void setTemplate_id(String template_id) {
        this.template_id = template_id;
    }
 
    public String getUrl() {
        return url;
    }
 
    public void setUrl(String url) {
        this.url = url;
    }
 
    public String getTopcolor() {
        return topcolor;
    }
 
    public void setTopcolor(String topcolor) {
        this.topcolor = topcolor;
    }
 
    public void add2Data(String key, ColorAndVal obj){
        this.data.put(key, obj);
    }
    public Map<String, ColorAndVal> getData() {
        return data;
    }
 
    private String touser;
    private String template_id;
    private String url = "https//www.yourdomain.com";
    private String topcolor = "#FF0000";
    private Map<String, ColorAndVal> data = new HashMap<>();
 
}
这里特别要注意data属性的类型,实际上它应该是Map来实现,这里既满足属性名字为data,又满足多个扩展属性的自定义。

2、ColorAndVal的定义

由于每一个扩展属性值都是color和value来承载,因此我们定义如下的java类:

package com.template.dao.domain;
 
import com.template.utils.StringTool;
 
public class ColorAndVal{
    private String value;
    private String color = "#173177";
 
    public ColorAndVal(String value, String color){
        this.value = value;
        if (StringTool.isNotEmpty(color)){
            this.color = color;
        }
    }
 
    public String getValue() {
        return value;
    }
 
    public void setValue(String value) {
        this.value = value;
    }
 
    public String getColor() {
        return color;
    }
 
    public void setColor(String color) {
        this.color = color;
    }
}
3、自定义模板类

这个类主要根据不同模板的具体属性、模板id不同而不同。下面的类包含name和remark两个属性,具体定义如下:

package com.template.dao.domain;
 
public class WXTM00001 extends WXTemplateMsgBase{
 
    private final String TEMPLATE_ID = "0vpDGpy7AJ-0MkT-i9c_xwgVCvIs8ot2VAoynx_m704";
 
    public WXTM00001(){
        super.setTemplate_id(this.TEMPLATE_ID);   //设置自身的模板id
    }
 
    public void setName(ColorAndVal name) {
        super.add2Data("name", name);       //将name属性的值添加到Map中
    }
 
    public void setRemark(ColorAndVal remark) {
        super.add2Data("remark", remark);   //将remark属性的值添加到Map中
    }
 
}
4、如何调用

import com.alibaba.fastjson.JSONObject;
 
 
WXTM00001 wxtm = new WXTM00001();
wxtm.setName(new ColorAndVal("itradar", ""));
wxtm.setRemark(new ColorAndVal("sucess!", ""));
wxtm.setTouser("8899");
String jsStr = JSONObject.toJSONString(wxtm);
System.out.println(jsStr);
 
---------------------
作者:IT-Radar
来源:CSDN
原文:https://blog.csdn.net/showhand2008/article/details/84477756
版权声明:本文为博主原创文章,转载请附上博文链接!

  推荐精品文章

·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 
·2023年7月目录
·2023年6月目录 
·2023年5月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089