国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

短鏈跳轉不再煩惱!SpringBoot 一鍵解決方案

開發 前端
通過本文的講解,我們成功實現了一個基于 Spring Boot 的短鏈接服務,從短鏈接的生成到跳轉完成了全鏈路功能設計。在實現過程中,我們使用了 MyBatis-Plus 簡化數據訪問邏輯,通過精心設計的服務層確保了短鏈接的生成唯一性和效率。?

在現代互聯網中,短鏈接作為一種高效的 URL 縮短和分享方式,被廣泛應用于社交媒體、電子郵件營銷以及各類平臺中。然而,如何實現短鏈接跳轉功能,同時確保系統的穩定性與高效性,成為開發者面臨的一項重要挑戰。

本篇文章將通過 SpringBoot 提供的一鍵解決方案,幫助開發者快速實現短鏈接跳轉功能。

短鏈跳轉的意義

用戶體驗優化

短鏈接長度短、外觀簡潔,能夠大幅提升用戶在鏈接分享與點擊過程中的體驗。

數據統計與跟蹤

通過短鏈接,可以有效追蹤鏈接的點擊情況,為營銷活動提供關鍵數據支持。

安全性與管理

短鏈接可以通過跳轉規則和權限控制,避免鏈接被濫用,并提升鏈接管理效率。

SpringBoot中的代碼實現

數據庫表設計

表結構保持不變:

CREATE TABLE url_map (
    id BIGINTAUTO_INCREMENTPRIMARYKEY,
    long_url VARCHAR(2083)NOTNULL,
    short_url VARCHAR(255)NOTNULL,
    username VARCHAR(255)NOTNULL,
    expire_time DATETIME,
    creation_time DATETIMEDEFAULTCURRENT_TIMESTAMP
);

SpringBoot中的代碼實現

利用 MyBatis-Plus 的注解,簡化實體類定義:

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.LocalDateTime;

@Data
@TableName("url_map")
public classUrlMap{
    @TableId
    private Long id;
    private String longUrl;
    private String shortUrl;
    private String username;
    private LocalDateTime expireTime;
    private LocalDateTime creationTime;
}

Mapper 接口

MyBatis-Plus 自動生成 SQL,無需手動編寫 XML 映射文件:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.icoderoad.entity.UrlMap;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UrlMapMapper extends BaseMapper<UrlMap> {
}

服務層

服務層實現短鏈接生成和解析邏輯:

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.icoderoad.entity.UrlMap;
import com.icoderoad.mapper.UrlMapMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.time.LocalDateTime;

@Service
public class UrlMapService{
    @Resource
    private UrlMapMapper urlMapMapper;

    public Stringencode(String longUrl,String username){
        QueryWrapper<UrlMap> queryWrapper =new QueryWrapper<>();
        queryWrapper.eq("long_url", longUrl).eq("username", username);
        UrlMap existingMap = urlMapMapper.selectOne(queryWrapper);

        if(existingMap !=null){
            return existingMap.getShortUrl();
        }

        String shortUrl =generateShortLink(longUrl, username);
        UrlMap newMap = new UrlMap();
        newMap.setLongUrl(longUrl);
        newMap.setShortUrl(shortUrl);
        newMap.setUsername(username);
        newMap.setCreationTime(LocalDateTime.now());

        urlMapMapper.insert(newMap);
        return shortUrl;
    }

    public Stringdecode(String shortUrl){
        QueryWrapper<UrlMap> queryWrapper =new QueryWrapper<>();
        queryWrapper.eq("short_url", shortUrl);
        UrlMap urlMap = urlMapMapper.selectOne(queryWrapper);

        return urlMap !=null? urlMap.getLongUrl():"https://defaultpage.com";
    }

    private StringgenerateShortLink(String longUrl,String username){
        try{
            MessageDigest md =MessageDigest.getInstance("SHA-256");
            byte[] hash = md.digest((longUrl + username).getBytes());
            StringBuilder shortUrlBuilder =newStringBuilder();
            for(byte b : hash){
                shortUrlBuilder.append(String.format("%02x", b));
            }
            return shortUrlBuilder.substring(0,8);
        }catch(NoSuchAlgorithmException e){
            throw new RuntimeException("Error generating short link", e);
        }
    }
}

控制層

控制器提供 REST 接口:

import com.icoderoad.common.ResponseBean;
import com.icoderoad.service.UrlMapService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.view.RedirectView;

import javax.annotation.Resource;

@RestController
public class UrlMapController{
    @Resource
    private UrlMapService urlMapService;

    @PostMapping("/shorten")
    public ResponseBean<String> shorten(@RequestParamString longUrl,@RequestParamString username){
        String shortUrl = urlMapService.encode(longUrl, username);
        returnResponseBean.success(shortUrl);
    }

    @GetMapping("/redirect")
    public RedirectViewredirect(@RequestParamString shortUrl){
        String longUrl = urlMapService.decode(shortUrl);
        return new RedirectView(longUrl);
    }
}

返回結果類

返回結果的封裝類:

public class ResponseBean<T>{
    private boolean success;
    private T data;

    public static<T> ResponseBean<T> success(T data){
        ResponseBean<T> response =new ResponseBean<>();
        response.success =true;
        response.data = data;
        return response;
    }

    public static<T>ResponseBean<T> error(){
        ResponseBean<T> response =new ResponseBean<>();
        response.success =false;
        return response;
    }
}

項目依賴

在 pom.xml 中添加 MyBatis-Plus 相關依賴:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3</version>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

結果測試

創建短鏈接

通過 Postman 或 cURL 發送 POST 請求,創建短鏈接:

使用 Postman 測試

1.設置請求類型為POST,請求地址為:

http://localhost:8080/shorten

2.在請求體中選擇 x-www-form-urlencoded,添加以下參數:

  • longUrl: https://www.example.com
  • username: test_user

3.點擊發送請求,響應示例如下:

{
  "success": true,
  "data": "http://localhost:8080/redirect?shortUrl=abcd1234"
}

使用 cURL 測試

運行以下命令:

curl -X POST http://localhost:8080/shorten \
     -d "longUrl=https://www.example.com" \
     -d "username=test_user"

響應:

{
  "success": true,
  "data": "http://localhost:8080/redirect?shortUrl=abcd1234"
}

短鏈接跳轉測試

測試步驟

1.在瀏覽器地址欄輸入生成的短鏈接,例如:

http://localhost:8080/redirect?shortUrl=abcd1234

2.按下回車鍵,瀏覽器將跳轉到原始鏈接:

https://www.example.com

響應驗證

通過 瀏覽器開發者工具 或 Postman,可以觀察 HTTP 重定向的響應頭,確認跳轉是否正確。例如:

HTTP/1.1 302 Found
Location: https://www.example.com

測試成功

當瀏覽器成功跳轉到 https://www.example.com 時,說明短鏈接跳轉功能正常工作。

總結

通過本文的講解,我們成功實現了一個基于 Spring Boot 的短鏈接服務,從短鏈接的生成到跳轉完成了全鏈路功能設計。在實現過程中,我們使用了 MyBatis-Plus 簡化數據訪問邏輯,通過精心設計的服務層確保了短鏈接的生成唯一性和效率。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2009-10-22 16:32:10

布線系統短鏈路問題

2012-09-27 09:22:54

Orange云計算解決方案云服務

2014-12-17 13:03:04

賽門鐵克災難恢復Windows Azu

2023-11-15 18:11:47

網絡故障以太網DOWN

2018-01-26 08:39:03

2022-04-07 13:56:13

前端一鍵換膚

2015-08-25 10:32:41

PDU

2022-05-19 14:40:21

網絡安全5G邊緣計算

2010-03-23 16:43:39

負載均衡互聯網鏈路深信服科技

2024-02-22 11:23:16

2020-06-22 21:38:58

冷鏈管理物聯網

2022-05-19 13:33:39

系統客戶端鏈路追蹤

2015-02-09 15:25:52

換膚

2013-09-16 09:07:15

網絡配置備份NCM

2015-08-19 14:19:42

2018-07-03 15:56:59

騰訊

2023-10-30 16:18:03

供應鏈管理綜合物流

2019-01-18 05:22:39

區塊鏈智能合約網絡安全

2019-02-18 20:14:12

AWS區塊鏈應用
點贊
收藏

51CTO技術棧公眾號

精品欧美一区二区在线观看视频 | 欧美大码xxxx| 欧美成人免费高清视频| 国产农村妇女毛片精品久久莱园子| 精品播放一区二区| 欧美日本韩国一区二区| 国产综合久久久久久鬼色| 亚洲淫片在线视频| 亚洲精品18| 精品国产亚洲在线| 热国产热中文视频二区| 91免费小视频| 欧美日韩亚洲一区二区三区在线观看| 亚洲日本视频| 国模套图日韩精品一区二区| 日本在线一区二区三区| av中文一区二区三区| 深田咏美在线x99av| 天堂美国久久| 成人欧美一区二区| 久久久久久影院| 91久久国产精品| 欧美日一区二区在线观看 | 国产91免费视频| 黄色亚洲在线| 精品国产日本| 精彩视频一区二区| 阿v天堂2017| 国产精品成人在线观看| 性欧美大战久久久久久久| 久久精品一区蜜桃臀影院| 国产精品裸体瑜伽视频| 国产欧美一区二区三区沐欲| 久久久亚洲精华液精华液精华液 | 亚洲综合精品自拍| 你懂的在线看| 欧美tk—视频vk| 久久伊人影院| 91精品黄色| 久久精品在线观看| 免费一级在线观看| 亚洲天堂免费观看| 久久99精品久久久久久园产越南| 国产精品爽爽爽| 老司机精品视频导航| 午夜爽爽爽男女免费观看影院| 欧美性色xo影院| 亚洲三级电影| 97视频中文字幕| 国产馆精品极品| 神马午夜dy888| 亚洲小视频在线观看| 影音先锋成人在线电影| avav在线看| 91精品欧美综合在线观看最新| aiss精品大尺度系列| 亚洲色图自拍| 欧美日韩国产片| 成人黄色av| 日日噜噜夜夜狠狠| 亚洲精品日韩欧美| 日韩成人dvd| 在线看黄色av| 成人av在线亚洲| 国产精品久久久久久久久免费桃花| 欧洲不卡av| 97av自拍| 狠狠久久亚洲欧美专区| 欧美大奶一区二区| 国产激情片在线观看| 精品人在线二区三区| 久久国产66| 男人av在线播放| 丁香五六月婷婷久久激情| 久久综合九色综合久| 91成人天堂久久成人| 国产丝袜欧美中文另类| 亚洲欧洲一二区| 精品少妇人妻av免费久久洗澡| 国产一区二区动漫| 国产精品美女久久久久久久久久久 | 久久精品日产第一区二区三区| 精品久久久久国产| 91成人观看| 乱一区二区三区在线播放| 国产精选久久久久久| 一区二区三区美女| 欧美禁忌电影网| 中文在线а√天堂官网| 国产在线观看精品| 欧美日韩免费区域视频在线观看| 国产在视频线精品视频www666| 特级全黄一级毛片| 久久草视频在线看| 亚洲欧洲黄色网| 99麻豆久久久国产精品免费| 日韩三区视频| 九色网友自拍视频手机在线| 亚洲一区二区精品在线观看| 亚洲美腿欧美激情另类| 国产亚洲精品久| 亚洲特级毛片| 欧美电影在线观看网站| 黄动漫视频高清在线| 亚洲乱码一区二区三区三上悠亚| 亚洲网在线观看| 激情成人中文字幕| proumb性欧美在线观看| 999精品在线| eeuss一区二区三区| 国产亚洲精品一区二555| 一区二区三区影院| 蜜桃av一区二区| 日本免费专区| 特级西西人体www高清大胆| 91av视频在线观看| 欧美精品一区二区三| 国产精品网站导航| 免费在线成人| 日韩在线高清| 欧美自拍一区| 久久久加勒比| av免费在线网站| 你懂的视频在线播放| 波多野吉衣av| 男女无套免费视频网站动漫| 伊人久久青草| 亚洲国产日韩美| 蜜桃导航-精品导航| 91色琪琪电影亚洲精品久久| 久久久999国产| www.欧美精品| 日韩中文字幕网址| 日韩av中文字幕在线播放| 日韩小视频在线观看专区| 亚洲国产欧美在线| 久久不卡国产精品一区二区| 米奇777四色精品人人爽| 天堂аⅴ在线最新版在线| av漫画网站| 成人免费视频网站在线看| 美女扒开大腿让男人桶| 欧美成熟毛茸茸复古| 成人欧美一区二区三区黑人| 久久久久久com| 日本一欧美一欧美一亚洲视频| 日韩中文综合网| 亚洲天堂男人天堂女人天堂| 亚洲男人天堂2024| 日韩午夜激情电影| 欧美一级理论片| 欧美日韩不卡一区二区| 9191成人精品久久| 亚洲精品乱码久久久久久按摩观| 狠狠色狠狠色综合日日五| 天天操天天干天天综合网| 日本高清不卡一区| 欧美午夜电影在线播放| 日韩高清中文字幕| 中文字幕自拍vr一区二区三区| 美腿丝袜一区二区三区| 久久久影视传媒| 久久婷婷成人综合色| 欧美精品国产一区| 91精品蜜臀一区二区三区在线| 偷拍视频一区二区三区| 欧美伦理视频在线观看| 欧美一区深夜视频| 亚洲成人自拍网| 日韩一卡二卡三卡四卡| 亚洲最新在线视频| 久久久久国产精品www| av观看久久| 国产www免费| 欧美色综合一区二区三区| 妞干网免费在线视频| 亚洲国产合集| 日韩成人一区二区三区在线观看| 西西裸体人体做爰大胆久久久| 韩日欧美一区二区三区| 亚洲色图另类专区| 欧美变态凌虐bdsm| 国产精品2018| 国产h视频在线播放| 无线免费在线视频| 欧美极品影院| 激情久久一区| 2017欧美狠狠色| 日韩av在线看| 久久综合色一本| 性猛交ⅹ×××乱大交| 1024免费在线视频| 精品国产不卡| 国产成人亚洲综合a∨婷婷 | 日韩欧美一区二区三区在线| 欧美国产日产韩国视频| 黄色网络在线观看| 国产黄在线看| 国产一区二区三区不卡视频网站| 99国产精品视频免费观看|