springboot集成teams的方法是什么
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,本篇内容主要讲解"springboot集成teams的方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"springboot集成teams的方法是什
千家信息网最后更新 2025年11月11日springboot集成teams的方法是什么
本篇内容主要讲解"springboot集成teams的方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"springboot集成teams的方法是什么"吧!
添加依赖
com.microsoft.graph microsoft-graph 2.3.2 com.microsoft.graph microsoft-graph-core 1.0.5 com.microsoft.graph microsoft-graph-auth 0.3.0-SNAPSHOT com.microsoft.azure msal4j 1.0.0
业务逻辑层
package com.tg.admin.service; import com.tg.admin.utils.CommonResult;import java.util.Map;/** * 用户信息 * * @author summer.chou * @date 2020/11/26 */public interface SplGraphService { /** * 获取token(自动刷新) * * @return token */ String getToken(); * 获取用户所属团队 * @return 结果 CommonResult业务逻辑实现
package com.tg.admin.service.impl; import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import com.microsoft.graph.models.extensions.IGraphServiceClient;import com.microsoft.graph.requests.extensions.GraphServiceClient;import com.tg.admin.service.ChannelUserLogService;import com.tg.admin.service.SplGraphService;import com.tg.admin.utils.*;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Lazy;import org.springframework.http.HttpHeaders;import org.springframework.http.MediaType;import org.springframework.stereotype.Service;import org.springframework.web.client.RestTemplate;import java.util.HashMap;import java.util.List;import java.util.Map;/** * teams Graph模块 第三方接口调用封装 * * @author summer.chou * @date 2020/12/30 */@Service@Slf4jpublic class SplGraphServiceImpl implements SplGraphService { @Value("#{'${teams.graph.scopes}'.split(',')}") private List scopes; @Value("${teams.graph.clientId}") private String clientId; @Value("${teams.graph.team.url}") private String teamsUrl; @Value("${teams.graph.channel.url}") private String channelUrl; @Value("${teams.graph.add.channel.url}") private String addChannelUrl; @Value("${teams.graph.ms.url}") private String msUrl; @Value("${teams.graph.member.url}") private String memberUrl; @Value("${teams.graph.add.channel.members.url}") private String addChannelMembersUrl; @Value("${teams.graph.account}") private String account; @Value("${teams.graph.password}") private String password; private RedisUtil redisUtil; private RestTemplate restTemplate; private ChannelUserLogService channelUserLogService; public SplGraphServiceImpl(RestTemplate restTemplate, RedisUtil redisUtil, @Lazy ChannelUserLogService channelUserLogService) { this.restTemplate = restTemplate; this.redisUtil = redisUtil; this.channelUserLogService = channelUserLogService; } @Override public String getToken() { Object token = redisUtil.get(Constants.ADMIN_TOKEN_KEY + account); try { if (token == null) { MyAuthenticationProvider authProvider = new MyAuthenticationProvider(clientId, scopes, account, password); IGraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider(authProvider).buildClient(); graphClient.me().buildRequest().get(); token = authProvider.getToken(); redisUtil.set(Constants.ADMIN_TOKEN_KEY + account, token, Constants.TOKEN_EXPIRES_TIME); } } catch (Exception e) { log.info("获取teams-graph,获取token接口异常", e); } return token.toString(); public CommonResult> getTeamsInfo() { JSONArray value = null; Map result = new HashMap<>(); JSONObject jsonObject = new JSONObject(); log.info("调用temas获取团队信息:teamsUrl{}", teamsUrl); //设置请求头 HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", getToken()); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); jsonObject = RestTemplateUtils.requestByGet(teamsUrl, null, restTemplate, headers); log.info("返回值:jsonObject:{}", jsonObject.toJSONString()); value = jsonObject.getJSONArray("value"); result.put("value", value); e.printStackTrace(); return CommonResult.ok(result); public CommonResult> getChannel(String teamId) { JSONArray array = null; String url = channelUrl.replace("{team-id}", teamId); log.info("调用teams获取用户渠道url:{}", url); jsonObject = RestTemplateUtils.requestByGet(url, null, restTemplate, headers); log.info("返回结果:jsonObject:{}", jsonObject.toJSONString()); array = jsonObject.getJSONArray("value"); result.put("value", array); public CommonResult> getMember(String teamsId, String channelId) { String url = memberUrl.replace("{team-id}", teamsId).replace("{channel-id}", channelId); log.info("调用teams获取渠道成员:url:{}", url); public CommonResult> sendMs(String content, String teamId, String channelId) { String url = msUrl.replace("{team-id}", teamId).replace("{channel-id}", channelId); log.info("调用teams发送消息:url:{}", url); Map map = new HashMap(); Map body = new HashMap<>(); map.put("content", content); map.put("contentType", "html"); body.put("body", map); jsonObject = RestTemplateUtils.requestByPost(url, body, restTemplate, headers); log.info("返回结果:jsonObject:{}", jsonObject.toJSONString()); return CommonResult.ok(); public CommonResult> addChannel(String displayName, String description, String teamId) { String url = addChannelUrl.replace("{id}", teamId); log.info("调用teams添加渠道:url:{}", url); map.put("displayName", displayName); map.put("description", description); jsonObject = RestTemplateUtils.requestByPost(url, map, restTemplate, headers); if (jsonObject != null) { result.put("id", jsonObject.getString("id")); public CommonResult> addMembers(String teamId, String channelId, String userNum) { String url = addChannelMembersUrl.replace("{team-id}", teamId).replace("{channel-id}", channelId); log.info("调用teams添加成员:url:{}", url); map.put("@odata.type", "#microsoft.graph.aadUserConversationMember"); JSONArray roles = new JSONArray(); roles.add("owner"); map.put("roles", roles);} RestTemplateUtils 工具类
package com.tg.admin.utils; import com.alibaba.fastjson.JSONObject;import org.springframework.http.HttpEntity;import org.springframework.http.HttpHeaders;import org.springframework.http.HttpMethod;import org.springframework.http.ResponseEntity;import org.springframework.stereotype.Component;import org.springframework.util.MultiValueMap;import org.springframework.web.client.RestTemplate;import org.springframework.web.util.UriComponentsBuilder; import java.util.HashMap;import java.util.Map; /** * RestTemplateUtils工具类 * * @author summer.chou * @date 2020/11/26 */@Componentpublic class RestTemplateUtils { /** * 根据get方式请求接口(复合类型get请求,支持所有get请求) * * @param url 请求路劲 * @param map 请求参数 无传null * @param restTemplate restTemplate对象 * @return json */ public static JSONObject requestByGet(String url, HashMap map, RestTemplate restTemplate, HttpHeaders headers) { // header填充 HttpEntity> request = new HttpEntity(null, headers); UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url); //ResponseEntity responseEntity; ResponseEntity responseEntity; //如果存在參數 if (map != null) { for (Map.Entry e : map.entrySet()) { //构建查询参数 builder.queryParam(e.getKey(), e.getValue()); } //拼接好参数后的URl//test.com/url?param1={param1}¶m2={param2}; String reallyUrl = builder.build().toString(); responseEntity = restTemplate.exchange(reallyUrl, HttpMethod.GET, request, JSONObject.class); } else { responseEntity = restTemplate.exchange(url, HttpMethod.GET, request, JSONObject.class); } return responseEntity.getBody(); } /** * 根据Post方式请求接口(复合类型,post支持所有json格式传参请求post请求) * * @param url 请求路径 * @param map 请求参数(无参数传null) * @param restTemplate restTemplate对象 * @return json */ public static JSONObject requestByPost(String url, Map map, RestTemplate restTemplate, HttpHeaders headers) { // header填充,map填充 HttpEntity> request = new HttpEntity>(map, headers); ResponseEntity entity = restTemplate.postForEntity(url, request, JSONObject.class); return entity.getBody(); } } 测试接口
package com.tg.admin.controller; import com.tg.admin.service.SplGraphService;import com.tg.admin.utils.CommonResult;import io.swagger.annotations.Api;import io.swagger.annotations.ApiImplicitParam;import io.swagger.annotations.ApiImplicitParams;import io.swagger.annotations.ApiOperation;import lombok.extern.slf4j.Slf4j;import org.springframework.cloud.context.config.annotation.RefreshScope;import org.springframework.web.bind.annotation.*;@Api(description = "teams-graph模块(第三方测试接口)")@RestController@RequestMapping("/graph")@RefreshScope@Slf4j@Deprecated //添加过期注解,接口保留方便后期异常排查public class GraphController { private SplGraphService tgService; public GraphController(SplGraphService tgService) { this.tgService = tgService; } @ApiOperation("获取所属团队信息") @GetMapping("/getTeamsInfo") public CommonResult getTeamsInfo() { return tgService.getTeamsInfo(); @ApiOperation("获取token") @GetMapping("/getToken") public CommonResult getToken() { return CommonResult.ok(tgService.getToken()); @ApiOperation("获取用户所属渠道") @ApiImplicitParams({ @ApiImplicitParam(name = "teamId", value = "团队Id", dataType = "string", required = true) }) @GetMapping("/getChannel") public CommonResult getChannel(@RequestParam(value = "teamId") String teamId) { return tgService.getChannel(teamId); @ApiOperation("获取渠道下的成员") @ApiImplicitParam(name = "teamId", value = "团队Id", dataType = "string", required = true), @ApiImplicitParam(name = "channelId", value = "渠道Id", dataType = "string", required = true) @GetMapping("/getMember") public CommonResult getMember(@RequestParam(value = "teamId") String teamId, @RequestParam(value = "channelId") String channelId) { return tgService.getMember(teamId, channelId); @ApiOperation("创建团队下的渠道(备用接口)") @ApiImplicitParam(name = "displayName", value = "渠道名称", dataType = "string", required = true), @ApiImplicitParam(name = "description", value = "渠道备注", dataType = "string", required = true) @PostMapping("/addChannel") public CommonResult addChannel(@RequestParam(value = "teamId") String teamId, @RequestParam(value = "displayName") String displayName, @RequestParam(value = "description") String description ) { return tgService.addChannel(displayName, description, teamId); @ApiOperation("向渠道里面添加成员(备用接口)") @ApiImplicitParam(name = "channelId", value = "渠道ID", dataType = "string", required = true), @ApiImplicitParam(name = "userNum", value = "用户Id", dataType = "string", required = true) @PostMapping("/addMembers") public CommonResult addMembers(@RequestParam(value = "teamId") String teamId, @RequestParam(value = "channelId") String channelId, @RequestParam(value = "userNum") String userNum return tgService.addMembers(teamId, channelId, userNum); @ApiOperation("通过teamId,channelId发送消息") @PostMapping("/sendMs") @ApiImplicitParam(name = "content", value = "内容", dataType = "string", required = true), public CommonResult sendMs(@RequestParam(value = "teamId") String teamId, @RequestParam(value = "content") String content, @RequestParam(value = "channelId") String channelId) { return tgService.sendMs(content, teamId, channelId);}yml 配置
teams: graph: #微软master账号,密码 account: 管理员账号 password: 管理员密码 add: channel: members: url: https://graph.microsoft.com/v1.0/teams/{team-id}/channels/{channel-id}/members url: https://graph.microsoft.com/v1.0/teams/{id}/channels channel: url: https://graph.microsoft.com/v1.0/teams/{team-id}/channels clientId: e730901a-8bf3-472b-93dd-afe79713bc5b member: url: https://graph.microsoft.com/v1.0/teams/{team-id}/channels/{channel-id}/members ms: url: https://graph.microsoft.com/v1.0/teams/{team-id}/channels/{channel-id}/messages scopes: Group.Read.All,User.Read team: url: https://graph.microsoft.com/v1.0/me/joinedTeams到此,相信大家对"springboot集成teams的方法是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
渠道
团队
接口
用户
参数
成员
方法
信息
内容
所属
消息
名称
结果
业务
备注
密码
对象
工具
方式
模块
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
守网络安全
广州财务软件开发哪家好
服务器荡机
快速软件开发
品诚网络技术有限公司
dnf怀旧服租服务器
网络安全手抄报黑板
贵州山区里的云服务器云主机
perm是什么缩写数据库中
邢台职业技术学院网络安全
数据库原理与应用教程尹志宁郭晴主编
数据库删除字段恢复
玩客云改装外网打印机服务器
软件开发是干什么的
linux 自带数据库
联想服务器怎么关闭numa
宁德万云网络技术有限公司
间接胎压监测软件开发
软件开发修改文档模板
对我国数据库技术创新的建议
域文件服务器怎么共享文件
网上租服务器贵吗
网络安全重点人员安全协议
淮北手机软件开发定制
psql 数据库列表
网络安全知识抢答赛简报
监控系统数据库数据分析
中信银行招聘软件开发
iis服务器教程
手动收缩数据库代码