diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/feishu/service/impl/FeiShuDockingServiceImpl.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/feishu/service/impl/FeiShuDockingServiceImpl.java index ee09ceab..4390a10c 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/feishu/service/impl/FeiShuDockingServiceImpl.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/feishu/service/impl/FeiShuDockingServiceImpl.java @@ -37,6 +37,8 @@ import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import javax.annotation.Resource; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.util.*; import java.util.stream.Collectors; @@ -250,7 +252,7 @@ public class FeiShuDockingServiceImpl implements IFeiShuDockingService { } } - private ApprovalsInstanceVo buildApprovalsInstanceVo(InstanceDto instanceDto) { + private ApprovalsInstanceVo buildApprovalsInstanceVo(InstanceDto instanceDto) throws Exception { // 转换userId为飞书Id // 发起人的id String promoterUserId = instanceDto.getPromoterUserId(); @@ -292,25 +294,38 @@ public class FeiShuDockingServiceImpl implements IFeiShuDockingService { if (StringUtils.isNotBlank(reviewPcLink)) { reviewPcLinkList = Arrays.asList(reviewPcLink.split(",")); reviewPcLinkList = reviewPcLinkList.stream() - .map(link -> url.replace("{REDIRECT_URI}", link)) - .collect(Collectors.toList()); + .map(link -> { + try { + String encodedLink = URLEncoder.encode(link, "UTF-8"); + return url.replace("{REDIRECT_URI}", encodedLink); + } catch (UnsupportedEncodingException e) { + return null; + } + }).collect(Collectors.toList()); } + // 审核人对应的 mobile 跳转地址 String reviewMobileLink = instanceDto.getReviewMobileLink(); List reviewMobileLinkList = new ArrayList<>(); if (StringUtils.isNotBlank(reviewMobileLink)) { reviewMobileLinkList = Arrays.asList(reviewMobileLink.split(",")); reviewMobileLinkList = reviewMobileLinkList.stream() - .map(link -> url.replace("{REDIRECT_URI}", link)) - .collect(Collectors.toList()); + .map(link -> { + try { + String encodedLink = URLEncoder.encode(link, "UTF-8"); + return url.replace("{REDIRECT_URI}", encodedLink); + } catch (UnsupportedEncodingException e) { + return null; + } + }).collect(Collectors.toList()); } // 发起人对应的pc的跳转地址 - String promoterPcLink = instanceDto.getPromoterPcLink(); + String promoterPcLink = URLEncoder.encode(instanceDto.getPromoterPcLink(), "UTF-8"); if (StringUtils.isNotBlank(promoterPcLink)) { promoterPcLink = url.replace("{REDIRECT_URI}", promoterPcLink); } // 发起人移动端的跳转地址 - String promoterMobileLink = instanceDto.getPromoterMobileLink(); + String promoterMobileLink = URLEncoder.encode(instanceDto.getPromoterMobileLink(), "UTF-8"); if (StringUtils.isNotBlank(promoterMobileLink)) { promoterMobileLink = url.replace("{REDIRECT_URI}", promoterMobileLink); } @@ -404,7 +419,8 @@ public class FeiShuDockingServiceImpl implements IFeiShuDockingService { return; } // 将url替换为单点登录的地址 - String hrefUrl = botMessageDto.getHrefUrl(); + // 使用 URL 编码来处理特殊字符,将url替换为单点登录的地址 + String hrefUrl = URLEncoder.encode(botMessageDto.getHrefUrl(), "UTF-8"); if (StringUtils.isNotBlank(hrefUrl)) { hrefUrl = signLoginUrl.replace("{REDIRECT_URI}", hrefUrl); }