短url服务java_springboot+layui简单易懂的短网址服务搭建,提供源码

package com.yutons.service;

import com.yutons.response.ResultBean;

import com.yutons.response.ResultCode;

import com.yutons.utils.MyShortUrlUtil;

import com.yutons.utils.RedisUtil;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

/**

* @Title 短网址转换服务

* @Author yutons

* @Date 2019/7/12 22:50

* @Desc

*/

@Service

public class ShortUrlConvertService {

@Value("${domain}")

private String domain;

@Autowired

private RedisUtil redisUtil;

/**

* 短网址加密生成(为空默认有效期7天,可自定义时长)

*

* @param urlLong

* @param days

* @return

*/

public ResultBean shorten(String urlLong, Integer days) {

days = days == null ? 7 : days;

//加密短网址,返回短网址URL数组

String shortUrl = generateUrl(urlLong, days, TimeUnit.DAYS);

domain = domain.endsWith("/") ? domain : domain + "/";

shortUrl = domain + shortUrl;

ResultBean resultBean = new ResultBean<>(shortUrl);

if (shortUrl==null){

resultBean=new ResultBean(ResultCode.FAIL,"网址非法,转换失败!");

}

return resultBean;

}

/**

* 短网址解密

*

* @param shortUrl

* @return

*/

public ResultBean shortde(String shortUrl) {

shortUrl = shortUrl.replaceAll(domain, "");

//判断网址是否存在

String url = redisUtil.get("shortUrl:" + shortUrl);

ResultBean resultBean = new ResultBean<>(url);

if (url==null){

resultBean=new ResultBean(ResultCode.FAIL,"短网址非法,解析失败!");

}

return resultBean;

}

private String generateUrl(String urlLong, Integer times, TimeUnit timeUnit) {

//加密短网址,返回短网址URL数组

String[] shortUrls = MyShortUrlUtil.shortUrl(urlLong);

//循环获取加密url

for (String shortUrl : shortUrls) {

//判断短网址是否存在

Boolean exists = redisUtil.exists("shortUrl:" + shortUrl);

if (exists) {

//判断网址是否存在

String url = redisUtil.get("shortUrl:" + shortUrl);

if (urlLong.equals(url)) {

redisUtil.set("shortUrl:" + shortUrl, urlLong);

if (times!=0){

redisUtil.expire("shortUrl:" + shortUrl, times, timeUnit);

}

return shortUrl;

}

continue;

}

redisUtil.set("shortUrl:" + shortUrl, urlLong);

if (times!=0){

redisUtil.expire("shortUrl:" + shortUrl, times, timeUnit);

}

return shortUrl;

}

return null;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值