基于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);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值