导读:本文根据微信模板消息的所要求的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);
|