当前位置: 首页 > article >正文

短链接功能实现

数据库

MySql

CREATE TABLE `short_link` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', 
  `create_id` bigint(20) DEFAULT NULL COMMENT '创建人',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `short_link_code` varchar(255) DEFAULT NULL, 
  `jump_path` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uc_short_link_code` (`short_link_code`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COMMENT='短链接映射表';

nginx 设置

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen 3501; # 自行配置
        server_name 192.168.1.62 127.0.0.1; # 自行配置

        access_log  logs/3501.access.log; 

        location ~ ^/([a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9])$ {
            set $shortLink $1;
            rewrite ^ /shortLink/$shortLink permanent;
        }

    }
}

Java 服务

@RestController
@RequestMapping("/shortLink")
@Tag(name = "短链接")
public class ShortLinkController {


    @Resource
    private ShortLinkService shortLinkService;

    @GetMapping("/{shortLink}")
    @Operation(summary = "短链接重定向")
    public void shortLinkRedirect(@PathVariable("shortLink") String shortLink,
                                  HttpServletResponse response) throws IOException {

        ShortLink data = shortLinkService.getOne(
                Wrappers.lambdaQuery(ShortLink.class)
                        .eq(ShortLink::getShortLinkCode, shortLink)
        );
        if (data == null) {
            throw new ServiceException("链接无效!");
        }

        response.sendRedirect(data.getJumpPath());
    }

}

测试

插入数据

INSERT INTO  `short_link`(  `create_id`, `create_time`, `short_link_code`,   `jump_path`) VALUES (  23, '2025-01-15 16:42:28', '3lfaBU', 'http://www.baidu.com');

访问:http://192.168.1.62:3501/3lfaBU 会自动跳转至 http://www.baidu.com


http://www.kler.cn/a/511240.html

相关文章:

  • 【Golang/nacos】nacos配置的增删查改,以及服务注册的golang实例及分析
  • IJCAI-2024 | 具身导航的花样Prompts!VLN-MP:利用多模态Prompts增强视觉语言导航能力
  • 大模型GUI系列论文阅读 DAY1:《基于大型语言模型的图形用户界面智能体:综述》
  • 【18】Word:明华中学-儿童医保❗
  • [EAI-018] π0: A Vision-Language-Action Flow Model for General Robot Control
  • 医院挂号就诊系统设计与实现(代码+数据库+LW)
  • 通过ShiftMediaProject生成ffmpeg的DLL和Lib的简要说明
  • 几何数据结构之四叉树与八叉树
  • IDEA运行测试函数@Test注解旁边没有运行按钮
  • Python脚本搬运当前文件夹及其子文件夹中所有的.c格式的文件到当前新建的文件夹中
  • 什么是软件架构
  • Ansible自动化运维:基础与实践
  • js经典例题之var a = b = c = 9;
  • 解决后端接口返回Long类型参数导致的精度丢失问题
  • react使用react-redux状态管理
  • 【cursor重构谷粒商城】03——谷粒商城技术架构选型存在哪些不足?
  • 【Git】Git配置
  • 【PowerQuery专栏】PowerQuery的函数Excel.WorkBook
  • Jenkins-pipeline Jenkinsfile说明
  • 四、CSS效果
  • GaussDB日常维护操作
  • CSS3 动画详解
  • 废品回收小程序,数字化回收时代
  • 网络安全(渗透)
  • DATACOM-华为数通解决方案SDN、iMaster
  • C语言二级查漏补缺