From b87da90b699ba72ae50ecb428cc28d211f7f7432 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=A8=E6=9C=89=E9=B1=BC=E4=B8=B8?= <77617245+llw5181@users.noreply.github.com> Date: Sun, 27 Oct 2024 19:20:29 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E3=80=90=E4=BC=81=E4=B8=9A=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E3=80=91=E4=BF=AE=E5=A4=8D=E6=9B=B4=E6=96=B0=E6=A8=A1?= =?UTF-8?q?=E7=89=88=E5=8D=A1=E7=89=87=E6=B6=88=E6=81=AF=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E7=9A=84json=E5=BA=8F=E5=88=97=E5=8C=96=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cp/api/impl/WxCpTaskCardServiceImpl.java | 2 +- .../cp/bean/message/TemplateCardMessage.java | 176 +++++++++--------- .../bean/message/TemplateCardMessageTest.java | 39 ++++ 3 files changed, 133 insertions(+), 84 deletions(-) create mode 100644 weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/TemplateCardMessageTest.java diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTaskCardServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTaskCardServiceImpl.java index 4802c5549..846945142 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTaskCardServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTaskCardServiceImpl.java @@ -65,6 +65,6 @@ public class WxCpTaskCardServiceImpl implements WxCpTaskCardService { @Override public void updateTemplateCardButton(TemplateCardMessage templateCardMessage) throws WxErrorException { String url = this.mainService.getWxCpConfigStorage().getApiUrl(UPDATE_TEMPLATE_CARD); - this.mainService.post(url, WxGsonBuilder.create().toJson(templateCardMessage)); + this.mainService.post(url, templateCardMessage.toJson()); } } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/TemplateCardMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/TemplateCardMessage.java index 417b5e80e..0d905e10f 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/TemplateCardMessage.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/TemplateCardMessage.java @@ -1,9 +1,10 @@ package me.chanjar.weixin.cp.bean.message; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; import java.io.Serializable; import java.util.List; @@ -14,152 +15,161 @@ import java.util.List; public class TemplateCardMessage implements Serializable { private static final long serialVersionUID = 8833792280163704239L; - @JsonProperty("userids") + @SerializedName("userids") private List userids; - @JsonProperty("partyids") + @SerializedName("partyids") private List partyids; - @JsonProperty("tagids") + @SerializedName("tagids") private List tagids; - @JsonProperty("atall") + @SerializedName("atall") private Integer atall; - @JsonProperty("agentid") + @SerializedName("agentid") private Integer agentid; - @JsonProperty("response_code") + @SerializedName("response_code") private String responseCode; - @JsonProperty("enable_id_trans") + @SerializedName("enable_id_trans") private Integer enableIdTrans; - @JsonProperty("template_card") + @SerializedName("template_card") private TemplateCardDTO templateCard; + /** + * To json string. + * + * @return the string + */ + public String toJson() { + return WxCpGsonBuilder.create().toJson(this); + } + @NoArgsConstructor @Data public static class TemplateCardDTO { - @JsonProperty("card_type") + @SerializedName("card_type") private String cardType; - @JsonProperty("source") + @SerializedName("source") private SourceDTO source; - @JsonProperty("main_title") + @SerializedName("main_title") private MainTitleDTO mainTitle; - @JsonProperty("select_list") + @SerializedName("select_list") private List selectList; - @JsonProperty("submit_button") + @SerializedName("submit_button") private SubmitButtonDTO submitButton; - @JsonProperty("replace_text") + @SerializedName("replace_text") private String replaceText; - @JsonProperty("checkbox") + @SerializedName("checkbox") private CheckboxDTO checkbox; - @JsonProperty("action_menu") + @SerializedName("action_menu") private ActionMenuDTO actionMenu; - @JsonProperty("quote_area") + @SerializedName("quote_area") private QuoteAreaDTO quoteArea; - @JsonProperty("sub_title_text") + @SerializedName("sub_title_text") private String subTitleText; - @JsonProperty("horizontal_content_list") + @SerializedName("horizontal_content_list") private List horizontalContentList; - @JsonProperty("card_action") + @SerializedName("card_action") private CardActionDTO cardAction; - @JsonProperty("button_selection") + @SerializedName("button_selection") private ButtonSelectionDTO buttonSelection; - @JsonProperty("button_list") + @SerializedName("button_list") private List buttonList; - @JsonProperty("image_text_area") + @SerializedName("image_text_area") private ImageTextAreaDTO imageTextArea; - @JsonProperty("card_image") + @SerializedName("card_image") private CardImageDTO cardImage; - @JsonProperty("vertical_content_list") + @SerializedName("vertical_content_list") private List verticalContentList; - @JsonProperty("jump_list") + @SerializedName("jump_list") private List jumpList; @NoArgsConstructor @Data public static class SourceDTO { - @JsonProperty("icon_url") + @SerializedName("icon_url") private String iconUrl; - @JsonProperty("desc") + @SerializedName("desc") private String desc; - @JsonProperty("desc_color") + @SerializedName("desc_color") private Integer descColor; } @NoArgsConstructor @Data public static class ActionMenuDTO { - @JsonProperty("desc") + @SerializedName("desc") private String desc; - @JsonProperty("action_list") + @SerializedName("action_list") private List actionList; } @NoArgsConstructor @Data public static class QuoteAreaDTO { - @JsonProperty("type") + @SerializedName("type") private Integer type; - @JsonProperty("url") + @SerializedName("url") private String url; - @JsonProperty("title") + @SerializedName("title") private String title; - @JsonProperty("quote_text") + @SerializedName("quote_text") private String quoteText; } @NoArgsConstructor @Data public static class CardActionDTO { - @JsonProperty("type") + @SerializedName("type") private Integer type; - @JsonProperty("url") + @SerializedName("url") private String url; - @JsonProperty("appid") + @SerializedName("appid") private String appid; - @JsonProperty("pagepath") + @SerializedName("pagepath") private String pagepath; } @NoArgsConstructor @Data public static class ButtonSelectionDTO { - @JsonProperty("question_key") + @SerializedName("question_key") private String questionKey; - @JsonProperty("title") + @SerializedName("title") private String title; - @JsonProperty("option_list") + @SerializedName("option_list") private List optionList; - @JsonProperty("selected_id") + @SerializedName("selected_id") private String selectedId; } @NoArgsConstructor @Data public static class HorizontalContentListDTO { - @JsonProperty("keyname") + @SerializedName("keyname") private String keyname; - @JsonProperty("value") + @SerializedName("value") private String value; - @JsonProperty("type") + @SerializedName("type") private Integer type; - @JsonProperty("url") + @SerializedName("url") private String url; - @JsonProperty("media_id") + @SerializedName("media_id") private String mediaId; - @JsonProperty("userid") + @SerializedName("userid") private String userid; } @NoArgsConstructor @Data public static class ButtonListDTO { - @JsonProperty("text") + @SerializedName("text") private String text; - @JsonProperty("style") + @SerializedName("style") private Integer style; - @JsonProperty("key") + @SerializedName("key") private String key; } @@ -167,23 +177,23 @@ public class TemplateCardMessage implements Serializable { @NoArgsConstructor @Data public static class CheckboxDTO { - @JsonProperty("question_key") + @SerializedName("question_key") private String questionKey; - @JsonProperty("option_list") + @SerializedName("option_list") private List optionList; - @JsonProperty("disable") + @SerializedName("disable") private Boolean disable; - @JsonProperty("mode") + @SerializedName("mode") private Integer mode; @NoArgsConstructor @Data public static class OptionListDTO { - @JsonProperty("id") + @SerializedName("id") private String id; - @JsonProperty("text") + @SerializedName("text") private String text; - @JsonProperty("is_checked") + @SerializedName("is_checked") private Boolean isChecked; } @@ -192,41 +202,41 @@ public class TemplateCardMessage implements Serializable { @NoArgsConstructor @Data public static class MainTitleDTO { - @JsonProperty("title") + @SerializedName("title") private String title; - @JsonProperty("desc") + @SerializedName("desc") private String desc; } @NoArgsConstructor @Data public static class SubmitButtonDTO { - @JsonProperty("text") + @SerializedName("text") private String text; - @JsonProperty("key") + @SerializedName("key") private String key; } @NoArgsConstructor @Data public static class SelectListDTO { - @JsonProperty("question_key") + @SerializedName("question_key") private String questionKey; - @JsonProperty("title") + @SerializedName("title") private String title; - @JsonProperty("selected_id") + @SerializedName("selected_id") private String selectedId; - @JsonProperty("disable") + @SerializedName("disable") private Boolean disable; - @JsonProperty("option_list") + @SerializedName("option_list") private List optionList; @NoArgsConstructor @Data public static class OptionListDTO { - @JsonProperty("id") + @SerializedName("id") private String id; - @JsonProperty("text") + @SerializedName("text") private String text; } } @@ -234,39 +244,39 @@ public class TemplateCardMessage implements Serializable { @NoArgsConstructor @Data public static class ImageTextAreaDTO { - @JsonProperty("type") + @SerializedName("type") private Integer type; - @JsonProperty("url") + @SerializedName("url") private String url; - @JsonProperty("title") + @SerializedName("title") private String title; - @JsonProperty("desc") + @SerializedName("desc") private String desc; - @JsonProperty("image_url") + @SerializedName("image_url") private String imageUrl; } @NoArgsConstructor @Data public static class CardImageDTO { - @JsonProperty("url") + @SerializedName("url") private String url; - @JsonProperty("aspect_ratio") + @SerializedName("aspect_ratio") private Double aspectRatio; } @NoArgsConstructor @Data public static class JumpListDTO { - @JsonProperty("type") + @SerializedName("type") private Integer type; - @JsonProperty("title") + @SerializedName("title") private String title; - @JsonProperty("url") + @SerializedName("url") private String url; - @JsonProperty("appid") + @SerializedName("appid") private String appid; - @JsonProperty("pagepath") + @SerializedName("pagepath") private String pagepath; } diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/TemplateCardMessageTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/TemplateCardMessageTest.java new file mode 100644 index 000000000..b2231a488 --- /dev/null +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/TemplateCardMessageTest.java @@ -0,0 +1,39 @@ +package me.chanjar.weixin.cp.bean.message; + +import com.google.common.collect.Lists; +import me.chanjar.weixin.common.util.json.GsonParser; +import org.testng.annotations.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * 测试用例中的json参考 https://developer.work.weixin.qq.com/document/path/94888 + *
+ * created on 2024-10-22 + */ +public class TemplateCardMessageTest { + + /** + * Test to json video. + */ + @Test + public void testToJson() { + + TemplateCardMessage templateCardMessage = new TemplateCardMessage(); + templateCardMessage.setAgentid(0); + templateCardMessage.setUserids(Lists.newArrayList("userid1", "userid2")); + templateCardMessage.setResponseCode("xihrjiohewirfhwripsiqwjerdio_dhweu"); + TemplateCardMessage.TemplateCardDTO templateCardDTO = new TemplateCardMessage.TemplateCardDTO(); + templateCardMessage.setTemplateCard(templateCardDTO); + TemplateCardMessage.TemplateCardDTO.SelectListDTO selectListDTO = new TemplateCardMessage.TemplateCardDTO.SelectListDTO(); + selectListDTO.setSelectedId("id"); + selectListDTO.setQuestionKey("question"); + templateCardDTO.setSelectList(Lists.newArrayList(selectListDTO)); + final String json = templateCardMessage.toJson(); + System.out.println(json); + String expectedJson = "{\"userids\":[\"userid1\",\"userid2\"],\"agentid\":0,\"response_code\":\"xihrjiohewirfhwripsiqwjerdio_dhweu\",\"template_card\":{\"select_list\":[{\"question_key\":\"question\",\"selected_id\":\"id\"}]}}"; + + assertThat(json).isEqualTo(GsonParser.parse(expectedJson).toString()); + } + +}