添加菜单API的支持

This commit is contained in:
Daniel Qian
2014-08-21 21:19:24 +08:00
parent 2f6003bae0
commit 0a3e136605
28 changed files with 527 additions and 176 deletions

View File

@@ -0,0 +1,115 @@
/*
* KINGSTAR MEDIA SOLUTIONS Co.,LTD. Copyright c 2005-2013. All rights reserved.
*
* This source code is the property of KINGSTAR MEDIA SOLUTIONS LTD. It is intended
* only for the use of KINGSTAR MEDIA application development. Reengineering, reproduction
* arose from modification of the original source, or other redistribution of this source
* is not permitted without written permission of the KINGSTAR MEDIA SOLUTIONS LTD.
*/
package chanjarster.weixin.util;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
public class GsonHelper {
public static boolean isNull(JsonElement element) {
return element == null || element.isJsonNull();
}
public static boolean isNotNull(JsonElement element) {
return !isNull(element);
}
public static Long getLong(JsonObject json, String property) {
return getAsLong(json.get(property));
}
public static long getPrimitiveLong(JsonObject json, String property) {
return getAsPrimitiveLong(json.get(property));
}
public static Integer getInteger(JsonObject json, String property) {
return getAsInteger(json.get(property));
}
public static int getPrimitiveInteger(JsonObject json, String property) {
return getAsPrimitiveInt(json.get(property));
}
public static Double getDouble(JsonObject json, String property) {
return getAsDouble(json.get(property));
}
public static double getPrimitiveDouble(JsonObject json, String property) {
return getAsPrimitiveDouble(json.get(property));
}
public static Float getFloat(JsonObject json, String property) {
return getAsFloat(json.get(property));
}
public static float getPrimitiveFloat(JsonObject json, String property) {
return getAsPrimitiveFloat(json.get(property));
}
public static Boolean getBoolean(JsonObject json, String property) {
return getAsBoolean(json.get(property));
}
public static String getString(JsonObject json, String property) {
return getAsString(json.get(property));
}
public static String getAsString(JsonElement element) {
return isNull(element) ? null : element.getAsString();
}
public static Long getAsLong(JsonElement element) {
return isNull(element) ? null : element.getAsLong();
}
public static long getAsPrimitiveLong(JsonElement element) {
Long r = getAsLong(element);
return r == null ? 0l : r;
}
public static Integer getAsInteger(JsonElement element) {
return isNull(element) ? null : element.getAsInt();
}
public static int getAsPrimitiveInt(JsonElement element) {
Integer r = getAsInteger(element);
return r == null ? 0 : r;
}
public static Boolean getAsBoolean(JsonElement element) {
return isNull(element) ? null : element.getAsBoolean();
}
public static boolean getAsPrimitiveBool(JsonElement element) {
Boolean r = getAsBoolean(element);
return r == null ? false : r.booleanValue();
}
public static Double getAsDouble(JsonElement element) {
return isNull(element) ? null : element.getAsDouble();
}
public static double getAsPrimitiveDouble(JsonElement element) {
Double r = getAsDouble(element);
return r == null ? 0d : r;
}
public static Float getAsFloat(JsonElement element) {
return isNull(element) ? null : element.getAsFloat();
}
public static float getAsPrimitiveFloat(JsonElement element) {
Float r = getAsFloat(element);
return r == null ? 0f : r;
}
}

View File

@@ -10,9 +10,9 @@ package chanjarster.weixin.util;
import java.lang.reflect.Type;
import chanjarster.weixin.out.WxCustomMessage;
import chanjarster.weixin.out.WxCustomMessage.WxArticle;
import chanjarster.weixin.service.WxMsgType;
import chanjarster.weixin.api.WxConsts;
import chanjarster.weixin.bean.WxCustomMessage;
import chanjarster.weixin.bean.WxCustomMessage.WxArticle;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
@@ -32,25 +32,25 @@ public class WxCustomMessageGsonAdapter implements JsonSerializer<WxCustomMessag
messageJson.addProperty("touser", message.getTouser());
messageJson.addProperty("msgtype", message.getMsgtype());
if (WxMsgType.TEXT.equals(message.getMsgtype())) {
if (WxConsts.TEXT.equals(message.getMsgtype())) {
JsonObject text = new JsonObject();
text.addProperty("content", message.getContent());
messageJson.add("text", text);
}
if (WxMsgType.IMAGE.equals(message.getMsgtype())) {
if (WxConsts.IMAGE.equals(message.getMsgtype())) {
JsonObject image = new JsonObject();
image.addProperty("media_id", message.getMedia_id());
messageJson.add("image", image);
}
if (WxMsgType.VOICE.equals(message.getMsgtype())) {
if (WxConsts.VOICE.equals(message.getMsgtype())) {
JsonObject voice = new JsonObject();
voice.addProperty("media_id", message.getMedia_id());
messageJson.add("voice", voice);
}
if (WxMsgType.VIDEO.equals(message.getMsgtype())) {
if (WxConsts.VIDEO.equals(message.getMsgtype())) {
JsonObject video = new JsonObject();
video.addProperty("media_id", message.getMedia_id());
video.addProperty("thumb_media_id", message.getThumb_media_id());
@@ -59,7 +59,7 @@ public class WxCustomMessageGsonAdapter implements JsonSerializer<WxCustomMessag
messageJson.add("video", video);
}
if (WxMsgType.MUSIC.equals(message.getMsgtype())) {
if (WxConsts.MUSIC.equals(message.getMsgtype())) {
JsonObject music = new JsonObject();
music.addProperty("title", message.getTitle());
music.addProperty("description", message.getDescription());
@@ -69,7 +69,7 @@ public class WxCustomMessageGsonAdapter implements JsonSerializer<WxCustomMessag
messageJson.add("music", music);
}
if (WxMsgType.NEWS.equals(message.getMsgtype())) {
if (WxConsts.NEWS.equals(message.getMsgtype())) {
JsonArray articleJsonArray = new JsonArray();
for (WxArticle article : message.getArticles()) {
JsonObject articleJson = new JsonObject();

View File

@@ -1,6 +1,7 @@
package chanjarster.weixin.util;
import chanjarster.weixin.out.WxCustomMessage;
import chanjarster.weixin.bean.WxCustomMessage;
import chanjarster.weixin.bean.WxMenu;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@@ -12,6 +13,7 @@ public class WxGsonBuilder {
static {
INSTANCE.disableHtmlEscaping();
INSTANCE.registerTypeAdapter(WxCustomMessage.class, new WxCustomMessageGsonAdapter());
INSTANCE.registerTypeAdapter(WxMenu.class, new WxMenuGsonAdapter());
}
public static Gson create() {

View File

@@ -10,12 +10,15 @@ package chanjarster.weixin.util;
import java.lang.reflect.Type;
import chanjarster.weixin.out.WxMenu;
import chanjarster.weixin.out.WxMenu.WxMenuButton;
import chanjarster.weixin.bean.WxMenu;
import chanjarster.weixin.bean.WxMenu.WxMenuButton;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
@@ -24,14 +27,14 @@ import com.google.gson.JsonSerializer;
* @author qianjia
*
*/
public class WxMenuGsonAdapter implements JsonSerializer<WxMenu> {
public class WxMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserializer<WxMenu> {
public JsonElement serialize(WxMenu menu, Type typeOfSrc, JsonSerializationContext context) {
JsonObject json = new JsonObject();
JsonArray buttonArray = new JsonArray();
for (WxMenuButton button : menu.getButton()) {
JsonObject buttonJson = serialize(button);
JsonObject buttonJson = convertToJson(button);
buttonArray.add(buttonJson);
}
json.add("button", buttonArray);
@@ -39,17 +42,48 @@ public class WxMenuGsonAdapter implements JsonSerializer<WxMenu> {
return json;
}
protected JsonObject serialize(WxMenuButton button) {
protected JsonObject convertToJson(WxMenuButton button) {
JsonObject buttonJson = new JsonObject();
buttonJson.addProperty("type", button.getType());
buttonJson.addProperty("name", button.getName());
// TODO 其他字段
if (button.getSub_button() == null || button.getSub_button().size() == 0) {
buttonJson.addProperty("key", button.getKey());
buttonJson.addProperty("url", button.getUrl());
if (button.getSub_button() != null && button.getSub_button().size() > 0) {
JsonArray buttonArray = new JsonArray();
for (WxMenuButton sub_button : button.getSub_button()) {
buttonArray.add(serialize(sub_button));
buttonArray.add(convertToJson(sub_button));
}
buttonJson.add("sub_button", buttonArray);
}
return buttonJson;
}
}
public WxMenu deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
WxMenu menu = new WxMenu();
JsonArray buttonsJson = json.getAsJsonObject().get("button").getAsJsonArray();
for (int i = 0; i < buttonsJson.size(); i++) {
JsonObject buttonJson = buttonsJson.get(i).getAsJsonObject();
WxMenuButton button = convertFromJson(buttonJson);
menu.getButton().add(button);
if (buttonJson.get("sub_button") == null || buttonJson.get("sub_button").isJsonNull()) {
continue;
}
JsonArray sub_buttonsJson = buttonJson.get("sub_button").getAsJsonArray();
for (int j = 0; j < sub_buttonsJson.size(); j++) {
JsonObject sub_buttonJson = sub_buttonsJson.get(j).getAsJsonObject();
button.getSub_button().add(convertFromJson(sub_buttonJson));
}
}
return menu;
}
protected WxMenuButton convertFromJson(JsonObject json) {
WxMenuButton button = new WxMenuButton();
button.setName(GsonHelper.getString(json, "name"));
button.setKey(GsonHelper.getString(json, "key"));
button.setUrl(GsonHelper.getString(json, "url"));
button.setType(GsonHelper.getString(json, "type"));
return button;
}
}