SpringBoot实现钉钉机器人消息推送的示例代码

下面是 Spring Boot 实现钉钉机器人消息推送的完整攻略。

1. 准备工作

在开始之前,需要完成以下几个步骤:

  1. 在钉钉工作台上创建一个自定义机器人。
  2. 获取钉钉机器人的 Webhook 值。

2. 新建 Spring Boot 项目

使用 Spring Initializr 创建一个新的 Spring Boot 项目。在这个项目中,我们需要引入以下依赖:

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.73</version>
</dependency>

<dependency>
  <groupId>com.dingtalk</groupId>
  <artifactId>taobao-sdk-java</artifactId>
  <version>20210420</version>
</dependency>

3. 创建钉钉机器人类和消息类

创建一个名为 DingtalkRobot 的类,用于发送消息和处理异常。代码如下:

import java.util.Collections;

import com.taobao.api.ApiException;
import com.taobao.api.DefaultTaobaoClient;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.OapiRobotSendRequest;
import com.taobao.api.response.OapiRobotSendResponse;

public class DingtalkRobot {

  private static final String DINGTALK_URL = "https://oapi.dingtalk.com/robot/send";

  private final String accessKey;

  public DingtalkRobot(String accessKey) {
    this.accessKey = accessKey;
  }

  public boolean sendMessage(String message) {
    TaobaoClient client = new DefaultTaobaoClient(DINGTALK_URL, accessKey, "");
    OapiRobotSendRequest request = new OapiRobotSendRequest();
    request.setMsgtype("text");
    request.setText(new OapiRobotSendRequest.Text());
    request.getText().setContent(message);
    request.setAt(new OapiRobotSendRequest.At());
    request.getAt().setAtMobiles(Collections.singletonList("12345678901"));
    request.getAt().setIsAtAll(false);
    try {
      OapiRobotSendResponse response = client.execute(request);
      if ("ok".equals(response.getErrmsg())) {
        return true;
      }
    } catch (ApiException e) {
      e.printStackTrace();
    }
    return false;
  }
}

创建一个名为 DingtalkMessage 的类,用于存储需要发送的消息。这个类包含了通用的消息格式。代码如下:

import java.util.HashMap;
import java.util.Map;

public class DingtalkMessage {

  public static final String MARKDOWN_TYPE = "markdown";
  public static final String TEXT_TYPE = "text";

  private String type;
  private Map<String, Object> content;
  private boolean atAll = false;
  private String[] atMobiles = new String[0];

  public DingtalkMessage() {
    this.type = TEXT_TYPE;
    this.content = new HashMap<>();
  }

  public DingtalkMessage(String type) {
    this.type = type;
    this.content = new HashMap<>();
  }

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

  public Map<String, Object> getContent() {
    return content;
  }

  public void setContent(Map<String, Object> content) {
    this.content = content;
  }

  public boolean isAtAll() {
    return atAll;
  }

  public void setAtAll(boolean atAll) {
    this.atAll = atAll;
  }

  public String[] getAtMobiles() {
    return atMobiles;
  }

  public void setAtMobiles(String[] atMobiles) {
    this.atMobiles = atMobiles;
  }

  public DingtalkMessage addContent(String key, Object value) {
    this.content.put(key, value);
    return this;
  }

  public DingtalkMessage addAtMobile(String mobile) {
    String[] newAtMobiles = new String[atMobiles.length + 1];
    System.arraycopy(atMobiles, 0, newAtMobiles, 0, atMobiles.length);
    newAtMobiles[atMobiles.length] = mobile;
    this.atMobiles = newAtMobiles;
    return this;
  }
}

4. 发送消息

要发送一条消息,可以按照以下步骤操作:

  1. 创建一个 DingtalkRobot 对象,并传入钉钉机器人的 accessKey。
  2. 创建一个 DingtalkMessage 对象。
  3. 设置 DingtalkMessage 的内容和 atMobiles 属性。
  4. 调用 DingtalkRobotsendMessage 方法,发送消息。

示例:

public static void main(String[] args) {
  // 1. 创建一个 DingtalkRobot 对象并传入钉钉机器人的 accessKey
  String accessKey = "钉钉机器人的 accessKey";
  DingtalkRobot robot = new DingtalkRobot(accessKey);

  // 2. 创建一个 DingtalkMessage 对象
  String title = "这是一条测试消息";
  String content = "测试内容...";
  DingtalkMessage message = new DingtalkMessage();
  message.setType(DingtalkMessage.MARKDOWN_TYPE);
  message.addContent("title", title)
         .addContent("text", content)
         .addAtMobile("12345678901");

  // 3. 发送消息
  robot.sendMessage(message);
}

5. 示例代码

下面给出一个更完整的代码示例:

import java.util.Collections;

import com.taobao.api.ApiException;
import com.taobao.api.DefaultTaobaoClient;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.OapiRobotSendRequest;
import com.taobao.api.response.OapiRobotSendResponse;

public class DingtalkRobot {

  private static final String DINGTALK_URL = "https://oapi.dingtalk.com/robot/send";

  private final String accessKey;

  public DingtalkRobot(String accessKey) {
    this.accessKey = accessKey;
  }

  public boolean sendMessage(DingtalkMessage message) {
    TaobaoClient client = new DefaultTaobaoClient(DINGTALK_URL, accessKey, "");
    OapiRobotSendRequest request = new OapiRobotSendRequest();
    request.setMsgtype(message.getType());
    switch (message.getType()) {
      case DingtalkMessage.TEXT_TYPE:
        request.setText(new OapiRobotSendRequest.Text());
        request.getText().setContent((String) message.getContent().get("text"));
        break;
      case DingtalkMessage.MARKDOWN_TYPE:
        request.setMarkdown(new OapiRobotSendRequest.Markdown());
        request.getMarkdown().setTitle((String) message.getContent().get("title"));
        request.getMarkdown().setText((String) message.getContent().get("text"));
        break;
      default:
        throw new IllegalArgumentException("Unsupported message type");
    }
    if (message.isAtAll()) {
      request.setAt(new OapiRobotSendRequest.At().setIsAtAll(true));
    } else {
      request.setAt(new OapiRobotSendRequest.At().setAtMobiles(convertToJavaList(message.getAtMobiles())));
    }
    try {
      OapiRobotSendResponse response = client.execute(request);
      if ("ok".equals(response.getErrmsg())) {
        return true;
      }
    } catch (ApiException e) {
      e.printStackTrace();
    }
    return false;
  }

  private <T> java.util.List<T> convertToJavaList(T[] arr) {
    if (arr == null) {
      return Collections.emptyList();
    }
    return java.util.Arrays.asList(arr);
  }
}

import java.util.HashMap;
import java.util.Map;

public class DingtalkMessage {

  public static final String MARKDOWN_TYPE = "markdown";
  public static final String TEXT_TYPE = "text";

  private String type;
  private Map<String, Object> content;
  private boolean atAll = false;
  private String[] atMobiles = new String[0];

  public DingtalkMessage() {
    this.type = TEXT_TYPE;
    this.content = new HashMap<>();
  }

  public DingtalkMessage(String type) {
    this.type = type;
    this.content = new HashMap<>();
  }

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

  public Map<String, Object> getContent() {
    return content;
  }

  public void setContent(Map<String, Object> content) {
    this.content = content;
  }

  public boolean isAtAll() {
    return atAll;
  }

  public void setAtAll(boolean atAll) {
    this.atAll = atAll;
  }

  public String[] getAtMobiles() {
    return atMobiles;
  }

  public void setAtMobiles(String[] atMobiles) {
    this.atMobiles = atMobiles;
  }

  public DingtalkMessage addContent(String key, Object value) {
    this.content.put(key, value);
    return this;
  }

  public DingtalkMessage addAtMobile(String mobile) {
    String[] newAtMobiles = new String[atMobiles.length + 1];
    System.arraycopy(atMobiles, 0, newAtMobiles, 0, atMobiles.length);
    newAtMobiles[atMobiles.length] = mobile;
    this.atMobiles = newAtMobiles;
    return this;
  }
}

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

  public static void main(String[] args) {
    String accessKey = "钉钉机器人的 accessKey";
    DingtalkRobot robot = new DingtalkRobot(accessKey);
    String title = "这是一条测试消息";
    String content = "测试内容...";
    DingtalkMessage message = new DingtalkMessage();
    message.setType(DingtalkMessage.MARKDOWN_TYPE);
    message.addContent("title", title)
         .addContent("text", content)
         .addAtMobile("12345678901");
    robot.sendMessage(message);
  }
}

上面的代码演示了一个用于发送钉钉机器人消息的示例。如果你需要发送多条消息,只需要创建多个 DingtalkMessage 对象,并循环调用 DingtalkRobotsendMessage 方法即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot实现钉钉机器人消息推送的示例代码 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • Java 流处理之收集器详解

    Java 流处理之收集器详解 Java 8 引入了一个新的 Stream API,其中的收集器(Collector)是 Java 8 可以处理流(Stream)中数据的一个关键工具。收集器是指将流中元素转换成不同形式的操作。在本文中,我们将详细介绍 Java 中的收集器。 收集器的基本概念 Java 8 提供了 22 个预定义的收集器。这些收集器和终止操作结…

    Java 2023年5月26日
    00
  • 关于java中的多态和对实例化对象的一些理解

    java面向对象三大特征即为:继承封装多态。而多态需要三大必要条件。分别是:继承、方法重写、父类引用指向子类对象。我们先一个一个来理解。 1、首先是继承和重写。这个很简单。因为多态就是建立在不同的重写之上的。也就是说多态就是在使用着一个方法的不同重写。而重写又是依赖着继承关系。 2、这个父类引用指向子类对象。 首先先上代码示例。 public class A…

    Java 2023年5月3日
    00
  • Jsp自定义标签和方法详解

    下面我来详细讲解“Jsp自定义标签和方法详解”的完整攻略。 一、自定义标签 1.1 概述 JSP标签可以分为三类:JSTL标签、自定义标签和自定义函数。其中,自定义标签是指在JSP页面中使用自己开发的标签,实现特定的功能。 1.2 步骤 自定义标签的开发主要分为以下步骤: 1)创建TLD文件:在Web应用的WEB-INF目录下创建一个.tld文件,用于描述标…

    Java 2023年6月15日
    00
  • Java swing 图像处理多种效果实现教程

    Java Swing是Java编程语言专为创建GUI(图形用户界面)设计的一种界面工具包。在Java Swing中,可以使用其图像处理功能实现许多效果。下面是“Java Swing图像处理多种效果实现教程”的完整攻略。 1. 导入Java Swing库 在Java项目文件中,需要导入Java Swing库以便使用其图像处理功能。可以在代码中写入以下代码: i…

    Java 2023年5月26日
    00
  • Java Web开发之MD5加密用法分析

    Java Web开发之MD5加密用法分析 什么是MD5加密 MD5全称为“Message-Digest Algorithm 5”,是一种非常常见并且安全性较高的哈希算法。MD5算法的核心在于将任意长度的数据(消息)通过一个不可逆的算法变换成一个固定长度的、十六进制表示的字符串,称为消息摘要。这个摘要具有防篡改性、密钥敏感性和抗碰撞等特性。 MD5加密的应用场…

    Java 2023年5月19日
    00
  • MyBatisPlus超详细分析条件查询

    以下是针对“MyBatisPlus超详细分析条件查询”的完整攻略: 一、MyBatisPlus概述 MyBatisPlus是对MyBatis进行了功能扩展和优化的一款工具。其提供了更加便捷的CRUD操作、Lambda表达式查询等功能,大大提升了开发效率。 二、条件查询 MyBatisPlus提供了多种条件查询的方式,包括wrapper、Lambda以及Que…

    Java 2023年5月20日
    00
  • java-servlet-转发AND路径(详解)

    下面是对应的完整攻略: Java Servlet 转发和路径详解 什么是 Servlet 转发? Servlet 转发是指一个 Servlet 将请求转发到另一个 Servlet(或 JSP、HTML等)进行处理,并将处理结果返回给客户端。在转发时,客户端并不知道请求被转发到了哪里,所以转发时可以使用相对路径,不一定非得使用绝对路径。 Servlet 转发示…

    Java 2023年6月15日
    00
  • java中synchronized锁的升级过程

    Java中的synchronized锁是一种用于实现线程同步的机制,它可以保证在多线程环境下的数据同步和共享资源的安全访问。在使用synchronized锁的时候,我们需要注意其锁的升级过程,因为锁升级过程直接影响着程序的性能和效率。 一、synchronized锁的升级过程 synchronized锁的升级过程可以分为三种状态,分别是无锁状态、偏向锁状态和…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部