java:实现用户扫码二维码自动跳转指定链接功能

news2025/5/18 16:57:07

0. 引言

近来接到要实现链接转二维码的需求,通过提供二维码给用户,让用户扫描后自动访问指定的H5页面,从而实现业务流转,这样的功能其实在其他很多场景也会用到,比如资产管理系统中,扫码资产二维码,从而实现库存盘点、自动入库、自动出库等功能

今天就这类需求场景,给大家做一个讲解示例

1. 需求分析

首先这类场景,我们先把需求简化,其实根本是要客户访问某个链接,比如库存盘点的功能链接,但是又要与具体的实体绑定,比如要知道这个是对应到具体某一个资产的,但其实只是加一个参数就行了,比如 http://host/assets/check?no=123456, 其中“123456”就是资产编号,这样就对应上了。

也有不是与具体物品绑定的,而是与账号、用户等虚拟信息绑定的场景,比如某一类app推广场景,用户可以生成自己的推广二维码,扫码了二维码注册的新用户,奖励就会算到这个用户的账户中。这种场景就需要和用户绑定,但转换成链接也很好理解,比如http://host/user/invite?userId=123456,这里的userId就是分享二维码的用户的id, 这样只要新用户在访问这个链接是,就能记录是谁推广的

如上,我们的需求定义清楚了,就是要用户访问指定的链接,并且链接上可能会带上一定的参数,而这个链接的展现形式就不是直接显示给链接了,而是以二维码的形式展现。

那我们的核心诉求,就变成了指定的链接转换成二维码。那么,我们来看如何实现

2. 二维码的实质

二维码(QR码)是一种二维图形编码技术,它可以将包含数据的信息以模块化的方式编码成黑白像素点组成的矩阵图案。这些图案可以被扫描设备(如手机相机)捕捉并解码,将其中的数据恢复出来。

实质上,二维码是一种特定的编码方式,可以表示数字、文本、链接、图像等各种类型的数据。

二维码的工作原理基于计算机视觉和图像处理技术。当扫描设备读取二维码时,它首先会通过光源照亮二维码,然后使用感光器记录反射回的光线。这些原始图像数据经过图像预处理、边缘检测和图像分析等步骤后,被转换为数字信号并进行解码,从而恢复出原始的数据。

3. zxing工具实现

在java中,我们可以利用谷歌开源的zxing工具包来实现二维码的生成

zxing源码地址:https://github.com/zxing/zxing

1、引入jar包

        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.3.0</version>
        </dependency>

2、创建工具类

public class QRcodeUtil {
    private static final String CHARSET = "utf-8";
    private static final String FORMAT_NAME = "JPG";
    // 二维码尺寸
    private static final int QRCODE_SIZE = 300;


    /**
     * 生成二维码图片
     * @param url 扫描二维码跳转地址
     * @return
     * @throws Exception
     */
    public static BufferedImage createImage(String url) throws Exception {
        Hashtable hints = new Hashtable();
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
        hints.put(EncodeHintType.CHARACTER_SET, CHARSET);
        hints.put(EncodeHintType.MARGIN, 1);
        BitMatrix bitMatrix = new MultiFormatWriter().encode(url, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE,
                hints);
        int width = bitMatrix.getWidth();
        int height = bitMatrix.getHeight();
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
            }
        }
        return image;
    }

    /**
     * 输出二维码
     * @param url 扫描二维码跳转地址
     * @param response
     * @throws Exception
     */
    public static void encode(String url, HttpServletResponse response)
            throws Exception {
        BufferedImage image = createImage(url);
        ImageIO.write(image, FORMAT_NAME, response.getOutputStream());


    }
}

3、创建实现转换的接口


@GetMapping("code")
    public void qrcode(String url, HttpServletResponse response) throws Exception {
        QRcodeUtil.encode(url, response);
    }

4、测试,访问该生成二维码的接口:http://localhost:8092/orders/code?url=http://www.baidu.com

这里我测试生成的链接是百度的,你可以根据自己的需求调整为自己的。需要注意的是,生成的链接一定要带上http://https://表明这是链接,而不是一段文字

生成的二维码如下所示
在这里插入图片描述

手机扫码,正常跳转百度,测试通过

在这里插入图片描述

总结

至此,针对生成二维码的功能就结束了,通过它我们可以实现各种便捷的交互功能,更多的拓展,大家可以动手尝试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/656337.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp实现tab切换可以滚动的效果

实现效果 当 tab 切换的内容很多时&#xff0c;需要用到滚动&#xff0c;希望在点击 tab 的时候可以自动滑动到对应的tab下 知识点 scrollIntoView&#xff1a;该scrollIntoView()方法将调用它的元素滚动到浏览器窗口的可见区域。 语法 element.scrollIntoView&#xff08…

2023 年企业 Java 面试前复习的正确姿势(已助力319人入职大厂)

作为 Java 程序员&#xff0c;选择学习什么样的技术&#xff1f;什么技术该不该学&#xff1f;去招聘网站上搜一搜、看看岗位要求就十分清楚了&#xff0c;自己具备的技术和能力&#xff0c;直接影响到你工作选择范围和能不能面试成功。 如果想进大厂&#xff0c;那就需要在 Ja…

ARM-Linux开发与MCU开发的不同之处分析

目录 一、ARM-Linux应用开发和单片机开发的不同 二、Arm-Linux基本开发环境 针对ARM-Linux程序的开发&#xff0c;主要分为三类&#xff1a;应用程序开发、驱动程序开发、系统内核开发。针对不同种类的软件开发&#xff0c;有其不同的特点。 今天&#xff0c;我们来看看ARM-L…

B-6:逆向分析及隐写

任务环境说明: 服务器场景: FTPServer20220509(关闭链接) FTP用户名:PE01密码: PE01 C语言:渗透机Windows7 (Embarcadero Dev-C++) 1,从靶机服务器的FTP上下载PE01文件,对PE01. exe二进制文件进行静态调试,将 main 函数的入口地址作为 Flag 值提交; 双击渗透机kali桌面上…

【数字图像处理】3.对比度增强

目录 3.1 灰度直方图 3.2 线性变换 3.3 直方图正规化 3.4 伽马变换 3.5 全局直方图均衡化 3.6 CLAHE 对比度增强是图像增强的一种&#xff0c;它主要解决的是图像的灰度级范围较小造成的对比度较低的问题&#xff0c;目的是将图像的灰度级增强到指定范围&#xff0c;使得…

Unity Metaverse(八)、RTC Engine 基于Agora声网SDK实现音视频通话

文章目录 简介创建应用构建应用场景API调用与回调事件测试 简介 本文介绍如何在Unity中接入声网SDK&#xff0c;它可以应用的场景有许多&#xff0c;例如直播、电商、游戏、社交等&#xff0c;音视频通话是其实时互动的基础能力。 如下图所示&#xff0c;可以在官网中选择Unit…

【Python实用基础整合(三)】儒略日计算、Pandas写Excel文件多Sheet以及datetime64[ns]时间格式处理

一、儒略日计算 儒略日&#xff08;Julian Day&#xff09;是在儒略周期内以连续的日数计算时间的计时法&#xff0c;主要用于天文学领域&#xff0c;SMOKE、CMAQ、CAMx等模型中也有使用。Linux中主要使用IOAPI库中的juldate和jul2greg来进行常规日期和儒略日的相互转化。Pyth…

MongoDB索引详解-03

MongoDB索引 索引是一种用来快速查询数据的数据结构。BTree 就是一种常用的数据库索引数据结构&#xff0c; MongoDB采用BTree 做索引 &#xff0c;索引创建在colletions上。MongoDB不使用索引的查 询&#xff0c;先扫描所有的文档&#xff0c;再匹配符合条件的文档。 使用索…

docker注意事项和https

docker容器安全注意&#xff1a; 尽量别做的事&#xff1a; 尽量不用 --privileged 运行容器授权容器root用户拥有宿主机的root权限 尽量不在 容器中运行 ssh 服务 尽量不用 --network host 使用 host 网络模式运行容器 尽量要做的事&#xff1a; 尽量使用最小化的镜像 尽量…

四六级套路总结

四六级 四级六级作文背多分 四级 英语四级&#xff08;必过12.10&#xff09; 听力&#xff1a; 全出现 头尾出现 &#xff08;直接选&#xff09; 长篇&#xff1a; 勾 8分钟&#xff0c;边勾边默念 念 勾完五句念一遍&#xff0c;十句通读&#xff08;时间够不要慌&#xff…

SpringSecurity从入门到精通

简介 ​ Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富。 ​ 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多&#xff0c;因为相比…

Three.js--》实现3D汽车展厅效果展示

目录 项目搭建 初始化three.js基础代码 加载汽车模型 设置展厅效果 设置GUI面板动态控制车身操作 车门操作与车身视角展示 设置手动点击打开关闭车门 设置图片背景 今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目…

【振奋人心】中科院芯片突破,中国ai将逆袭

最近&#xff0c;中国科学院在人工智能芯片领域取得了一项重大突破。中科院计算技术研究所和中国电子科技集团公司第五十三研究所联合研发的新型神经网络加速器芯片&#xff0c;成功实现高效率和低功耗的特性&#xff0c;而且在典型人工智能测试中获取了高达1000倍计算效率的提…

滤波器设计总结

滤波器的主要参数 中心频率&#xff08;Center Frequency&#xff09;&#xff1a;滤波器通带的频率f0&#xff0c;一般取f0&#xff08;f1f2&#xff09;/2&#xff0c;f1、f2为带通或带阻滤波器左、右相对下降1dB或3dB边频点。窄带滤波器常以插损最小点为中心频率计算通带带…

开源大型语言模型(llm)总结

大型语言模型&#xff08;LLM&#xff09;是人工智能领域中的一个重要研究方向&#xff0c;在ChatGPT之后&#xff0c;它经历了快速的发展。这些发展主要涉及以下几个方面&#xff1a; 模型规模的增长&#xff1a;LLM的规模越来越大&#xff0c;参数数量显著增加。这种扩展使得…

11个Java开发者收藏的网站!

导读Java是一种面向对象的编程语言&#xff0c;由Sun Microsystems公司在1995年的时候正式发布。直到今天&#xff0c;Java都一直是最受欢迎的编程语言之一。如今&#xff0c;Java应用于各种各样的技术领域&#xff0c;例如网站开发、Android开发、游戏开发、大数据等等。 在世…

12-代码实战——服务器版表白墙

目录 1.版本一&#xff1a;将数据存到内存中 ①约定前后端交互接口 a.添加表白信息&#xff1a; b.查询表白列表&#xff1a; ②在webapp包下创建message-wall.html前端文件 ③在java包下创建AddMessageServlet后端类 ④在java包下创建MessageListServlet后端类 2.版本…

华为OD机试之乱序整数序列两数之和绝对值最小(Java源码)

乱序整数序列两数之和绝对值最小 题目描述 给定一个随机的整数&#xff08;可能存在正整数和负整数&#xff09;数组 nums&#xff0c;请你在该数组中找出两个数&#xff0c;其和的绝对值(|nums[x]nums[y]|)为最小值&#xff0c;并返回这个两个数&#xff08;按从小到大返回&…

NXP IMX6ULL的官方文档、官方BSP、交叉编译工具链下载

目录 1 官网下载BSP以及相关文档 1.1 文档下载 1.2 NXP 官方uboot和kernel源码下载 1.3 官方评估板硬件资料下载 1.4 官方BSP下载 2 官网SDK下载 3 交叉编译工具链下载及安装 买了块IMX6ULL的开发板&#xff0c;然后移植uboot和kernel的时候&#xff0c;不想直接用开发板…