导读:本文根据微信模板消息的所要求的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 版权声明:本文为博主原创文章,转载请附上博文链接!
|