2.更改了WxMenu的toJson方法使menurule转换成正确的字符串 3.WxMenuTest中增加了相应的测试用例master
| @@ -1,15 +1,14 @@ | |||||
| package me.chanjar.weixin.common.bean; | package me.chanjar.weixin.common.bean; | ||||
| import me.chanjar.weixin.common.util.json.WxGsonBuilder; | |||||
| import org.apache.commons.codec.Charsets; | |||||
| import java.io.InputStream; | import java.io.InputStream; | ||||
| import java.io.InputStreamReader; | import java.io.InputStreamReader; | ||||
| import java.io.Serializable; | import java.io.Serializable; | ||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import java.util.List; | import java.util.List; | ||||
| import org.apache.commons.codec.Charsets; | |||||
| import me.chanjar.weixin.common.util.json.WxGsonBuilder; | |||||
| /** | /** | ||||
| * 企业号菜单 | * 企业号菜单 | ||||
| * @author Daniel Qian | * @author Daniel Qian | ||||
| @@ -136,6 +135,7 @@ public class WxMenu implements Serializable { | |||||
| private String province; | private String province; | ||||
| private String city; | private String city; | ||||
| private String clientPlatformType; | private String clientPlatformType; | ||||
| private String language; | |||||
| public String getGroupId() { | public String getGroupId() { | ||||
| return groupId; | return groupId; | ||||
| @@ -184,8 +184,16 @@ public class WxMenu implements Serializable { | |||||
| public void setClientPlatformType(String clientPlatformType) { | public void setClientPlatformType(String clientPlatformType) { | ||||
| this.clientPlatformType = clientPlatformType; | this.clientPlatformType = clientPlatformType; | ||||
| } | } | ||||
| @Override | |||||
| public String getLanguage() { | |||||
| return language; | |||||
| } | |||||
| public void setLanguage(String language) { | |||||
| this.language = language; | |||||
| } | |||||
| @Override | |||||
| public String toString() { | public String toString() { | ||||
| return "matchrule:{" + | return "matchrule:{" + | ||||
| "group_id='" + groupId + '\'' + | "group_id='" + groupId + '\'' + | ||||
| @@ -194,6 +202,7 @@ public class WxMenu implements Serializable { | |||||
| ", province" + province + '\'' + | ", province" + province + '\'' + | ||||
| ", city" + city + '\'' + | ", city" + city + '\'' + | ||||
| ", client_platform_type" + clientPlatformType + '\'' + | ", client_platform_type" + clientPlatformType + '\'' + | ||||
| ", language" + language + '\'' + | |||||
| "}"; | "}"; | ||||
| } | } | ||||
| } | } | ||||
| @@ -8,9 +8,6 @@ | |||||
| */ | */ | ||||
| package me.chanjar.weixin.common.util.json; | package me.chanjar.weixin.common.util.json; | ||||
| import java.lang.reflect.Type; | |||||
| import com.google.gson.Gson; | |||||
| import com.google.gson.JsonArray; | import com.google.gson.JsonArray; | ||||
| import com.google.gson.JsonDeserializationContext; | import com.google.gson.JsonDeserializationContext; | ||||
| import com.google.gson.JsonDeserializer; | import com.google.gson.JsonDeserializer; | ||||
| @@ -19,9 +16,10 @@ import com.google.gson.JsonObject; | |||||
| import com.google.gson.JsonParseException; | import com.google.gson.JsonParseException; | ||||
| import com.google.gson.JsonSerializationContext; | import com.google.gson.JsonSerializationContext; | ||||
| import com.google.gson.JsonSerializer; | import com.google.gson.JsonSerializer; | ||||
| import me.chanjar.weixin.common.bean.WxMenu; | import me.chanjar.weixin.common.bean.WxMenu; | ||||
| import java.lang.reflect.Type; | |||||
| /** | /** | ||||
| * | * | ||||
| * @author Daniel Qian | * @author Daniel Qian | ||||
| @@ -40,8 +38,7 @@ public class WxMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserializ | |||||
| json.add("button", buttonArray); | json.add("button", buttonArray); | ||||
| if (menu.getMatchRule() != null) { | if (menu.getMatchRule() != null) { | ||||
| Gson gson = new Gson(); | |||||
| json.add("matchrule", gson.toJsonTree(menu.getMatchRule())); | |||||
| json.add("matchrule", convertToJson(menu.getMatchRule())); | |||||
| } | } | ||||
| return json; | return json; | ||||
| @@ -63,6 +60,18 @@ public class WxMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserializ | |||||
| return buttonJson; | return buttonJson; | ||||
| } | } | ||||
| protected JsonObject convertToJson(WxMenu.WxMenuRule menuRule){ | |||||
| JsonObject matchRule = new JsonObject(); | |||||
| matchRule.addProperty("group_id",menuRule.getGroupId()); | |||||
| matchRule.addProperty("sex",menuRule.getSex()); | |||||
| matchRule.addProperty("country",menuRule.getCountry()); | |||||
| matchRule.addProperty("province",menuRule.getProvince()); | |||||
| matchRule.addProperty("city",menuRule.getCity()); | |||||
| matchRule.addProperty("client_platform_type",menuRule.getClientPlatformType()); | |||||
| matchRule.addProperty("language",menuRule.getLanguage()); | |||||
| return matchRule; | |||||
| } | |||||
| public WxMenu deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { | public WxMenu deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { | ||||
| /* | /* | ||||
| * 操蛋的微信 | * 操蛋的微信 | ||||
| @@ -55,6 +55,29 @@ public class WxMenuTest { | |||||
| Assert.assertEquals(menu.toJson(), json); | Assert.assertEquals(menu.toJson(), json); | ||||
| } | } | ||||
| @Test(dataProvider = "wxAddConditionalMenu") | |||||
| public void testAddConditionalToJson(String json) { | |||||
| WxMenu menu = new WxMenu(); | |||||
| WxMenuButton button1 = new WxMenuButton(); | |||||
| button1.setType("click"); | |||||
| button1.setName("今日歌曲"); | |||||
| button1.setKey("V1001_TODAY_MUSIC"); | |||||
| menu.getButtons().add(button1); | |||||
| WxMenu.WxMenuRule wxMenuRule = new WxMenu.WxMenuRule(); | |||||
| wxMenuRule.setGroupId("2"); | |||||
| wxMenuRule.setSex("1"); | |||||
| wxMenuRule.setCountry("中国"); | |||||
| wxMenuRule.setProvince("广东"); | |||||
| wxMenuRule.setCity("广州"); | |||||
| wxMenuRule.setClientPlatformType("2"); | |||||
| wxMenuRule.setLanguage("zh_CN"); | |||||
| menu.setMatchRule(wxMenuRule); | |||||
| Assert.assertEquals(menu.toJson(), json); | |||||
| } | |||||
| @DataProvider | @DataProvider | ||||
| public Object[][] wxReturnMenu() { | public Object[][] wxReturnMenu() { | ||||
| @@ -106,5 +129,31 @@ public class WxMenuTest { | |||||
| new Object[] { json } | new Object[] { json } | ||||
| }; | }; | ||||
| } | } | ||||
| @DataProvider(name = "wxAddConditionalMenu") | |||||
| public Object[][] addConditionalMenuJson(){ | |||||
| String json = | |||||
| "{" | |||||
| +"\"button\":[" | |||||
| +"{" | |||||
| +"\"type\":\"click\"," | |||||
| +"\"name\":\"今日歌曲\"," | |||||
| +"\"key\":\"V1001_TODAY_MUSIC\"" | |||||
| +"}" | |||||
| +"]," | |||||
| +"\"matchrule\":{" | |||||
| +"\"group_id\":\"2\"," | |||||
| +"\"sex\":\"1\"," | |||||
| +"\"country\":\"中国\"," | |||||
| +"\"province\":\"广东\"," | |||||
| +"\"city\":\"广州\"," | |||||
| +"\"client_platform_type\":\"2\"," | |||||
| +"\"language\":\"zh_CN\"" | |||||
| +"}" | |||||
| +"}"; | |||||
| return new Object[][]{ | |||||
| new Object[]{json} | |||||
| }; | |||||
| } | |||||
| } | } | ||||