java添加企微 群机器人 异常通知 流程

devtools/2025/1/15 9:08:09/

1. 在群设置 点击添加群机器人

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

要记住webhook地址 此处前置条件已完成

程序

这是官方文档

案例

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;/*** @Author:那日花开* @Package:com.geovis.webservice.util* @Project:digit-trade-platform* @name:RobotMessageUtil* @Date:2024/12/25 9:06* @Filename:RobotMessageUtil*/
@Slf4j
@Component
public class RobotMessageUtil {@Value("${webhool}")public String webhool;@Value("${environment}")public String environment;public void sentRobotMessage(String content){try {// 创建URL对象URL url = new URL(webhool);// 打开连接HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 设置请求方法为POSTconnection.setRequestMethod("POST");// 设置请求头Content-Type为application/jsonconnection.setRequestProperty("Content-Type", "application/json; utf-8");// 允许输出(发送请求体)connection.setDoOutput(true);content=environment+"\n"+content.replace("\"","");// 准备JSON数据String jsonInputString = "{ \"msgtype\": \"text\", \"text\": { \"content\": \" "+content+"\" } }";// 发送POST输出try (OutputStream os = connection.getOutputStream()) {byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8);os.write(input, 0, input.length);}// 获取响应码int responseCode = connection.getResponseCode();System.out.println("Response Code : " + responseCode);} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {try {// 创建URL对象URL url = new URL("群机器人的webhool");// 打开连接HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 设置请求方法为POSTconnection.setRequestMethod("POST");// 设置请求头Content-Type为application/jsonconnection.setRequestProperty("Content-Type", "application/json; utf-8");// 允许输出(发送请求体)connection.setDoOutput(true);// 准备JSON数据String jsonInputString = "{ \"msgtype\": \"text\", \"text\": { \"content\": \"hello  world \" } }";// 发送POST输出try (OutputStream os = connection.getOutputStream()) {byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8);os.write(input, 0, input.length);}// 获取响应码int responseCode = connection.getResponseCode();System.out.println("Response Code : " + responseCode);} catch (Exception e) {e.printStackTrace();}}
}

全局代码异常监听

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.HashMap;
import java.util.Map;@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public void handleException(Exception e, HttpServletRequest request) {// 获取请求的方法String requestMethod = request.getMethod();// 获取请求的参数Map<String, String[]> paramMap = request.getParameterMap();Map<String, Object> params = new HashMap<>();for (Map.Entry<String, String[]> entry : paramMap.entrySet()) {params.put(entry.getKey(), entry.getValue()[0]);}// 从请求中获取请求体(适用于 POST 请求)ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HandlerMethod handlerMethod = (HandlerMethod) attributes.getRequest().getAttribute("org.springframework.web.servlet.HandlerMapping.bestMatchingHandler");if (handlerMethod!= null) {Method method = handlerMethod.getMethod();Parameter[] parameters = method.getParameters();for (Parameter parameter : parameters) {if (parameter.isAnnotationPresent(RequestBody.class)) {// 这里可以根据实际情况处理请求体,例如使用 ObjectMapper 进行反序列化// 此处仅作示意params.put(parameter.getName(), "Request Body");}}}// 获取调用的方法名称String methodName = handlerMethod.getMethod().getName();// 记录异常信息和请求信息,可以使用日志框架,这里简单打印System.out.println("异常信息: " + e.getMessage());System.out.println("请求方法: " + requestMethod);System.out.println("请求参数: " + params);System.out.println("调用方法名称: " + methodName);//这个地方用机器人工具类  用上面的信息 拼接自己想要的通知}
}

end


http://www.ppmy.cn/devtools/150639.html

相关文章

wsl ubuntu 20.04 xrdp gnome 连接远程桌面闪退解决方法

本质原因是&#xff1a; 配置启动session&#xff0c;否则远程桌面登录输入密码之后会直接闪退这一步的问题&#xff0c;教程是下面这行代码&#xff0c;但是输入是无效的&#xff0c;就是你虽然输入了&#xff0c;但是没进去 echo "gnome-session" > ~/.xsessi…

【论文笔记】Sign Language Video Retrieval with Free-Form Textual Queries

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Sign Language Video Retr…

【fly-iot飞凡物联】(19):开源飞凡物联项目重启,使用go重写后端代码,感兴趣的小伙伴可以一起参加,使用apache协议开源,招募感兴趣的小伙伴!!

目录 前言fly-iot飞凡物联&#xff0c;感兴趣的小伙伴可以一起参加&#xff0c;使用apache协议开源使用go重写后端代码 前言 fly-iot飞凡物联专栏&#xff1a; https://blog.csdn.net/freewebsys/category_12219758.html fly-iot飞凡物联&#xff0c;感兴趣的小伙伴可以一起参…

C#图表性能的巅峰之选:LightningChart®.NET

C#图表性能的巅峰之选&#xff1a;LightningChart.NET 引言 在现代数据可视化中&#xff0c;性能是选择图表控件的关键因素。无论是实时数据监控、海量数据分析还是复杂 3D 可视化&#xff0c;LightningChart.NET 都以其卓越的性能成为市场上的佼佼者。 本文将深入探讨 Ligh…

lammps应用于能源材料

文章目录 1.能源材料1.锂硫电池2.储氢材料3.径向分布函数4.MD与能源材料 2.lammps计算锂硫电池的膨胀率3.lammps模拟金属Mg储氢 1.能源材料 锂离子二次电池&#xff0c;关键材料技术&#xff1a;阴极材料(LiCoO2等)、阳极材料(石墨、焦炭等)、集流体(Al、Cu等)、电解液(Li盐有…

学习通过几何约束从单个图像预测 3D 车道形状和相机姿态 | 论文解读

学习通过几何约束从单个图像预测 3D 车道形状和相机姿态 | Learning to Predict 3D Lane Shape and Camera Pose from a Single Image via Geometry Constraints https://zhuanlan.zhihu.com/p/563985000https://zhuanlan.zhihu.com/p/563985000

Swift语言的数据库编程

Swift语言的数据库编程 引言 在现代应用程序的开发中&#xff0c;数据的存储和管理是一个至关重要的环节。无论是移动应用、Web服务还是桌面软件&#xff0c;数据库都扮演着数据存储和检索的核心角色。随着Swift语言在iOS和macOS开发中的普及&#xff0c;越来越多的开发者开始…

c++基础算法讲解(写了ccf考试中可能出现的各种算法)

枚举法 枚举法是一种基本的问题解决策略&#xff0c;它尝试所有可能的情况以找到解决方案。这种方法通常用于问题规模较小且可以接受一定时间复杂度的情况。 例子&#xff1a;找出三个数中最大的数 #include <iostream> using namespace std;int findMax(int a, int b,…