生成二维码扫码可以访问不同路径的原理:比如问卷星不同的试卷发布的链接可以访问不同试卷

思考:

第一次遇到这种情况:想的是配置nginx的形式,每生成一次二维码就linux自动映射一次路径

但是我复制呢多个问卷星的考试连接对比发现:

相同类型的题路径是一样的,唯一不一样的地方是路径后缀 {id} 里面的值

复制的路径对比如下:

https://ks.wjx.top/vj/YHySy1c.aspx
https://ks.wjx.top/vj/hljVcYb.aspx

可以看出如果路径是: https://ks.wjx.top/vj/{id} 是不是就符合我们的猜想了呢?

验证假设:show me code 模式

  • 因为路径关联到数据库的考试的题型,所以 数据库表肯定有字段对应{id} 生成的时候,更新数据库,访问的时候查询数据库,进行对应的展示,保证id在数据库唯一,我们可以采用密码生成器来做这个事情,集成密码生成器工具类 找个工具包可以,也可以自己写个实现类。参考的代码如下:
  • 引用某位回答的,简单但是有些小问题,自己改改就可以了!
  • 
    public class RandomPassword {
        /**
         * 密码的长度
         */
        private static int passwordLength;
        /**
         * 生成的密码
         */
        private static StringBuffer password = new StringBuffer();
     
        public static void main(String[] args) {
            //初始化数字英文和符号
            String num = "0123456789";
            String english = "qwertyuiopasdfghjklzxcvbnm";
            String englishBig = "QWERTYUIOPASDFGHJKLZXCVBNM";
            String symbol = "!@#$%^&*_+-{}<>.*";
            String stringSum = num + english + englishBig + symbol;
            int length = stringSum.length();
            //定义密码长度,写死8
            passwordLength = 8;
            for (int i = 0; i < passwordLength; i++) {
                Random random = new Random();
                int a = random.nextInt(length + 1);
                char one = stringSum.charAt(a);
                password.append(one);
            }
            System.out.print(password + "  ");
        }
    }

     

  • 二维码生成ZXing,当然也可以用hutool,hutool也是基于zxing
  • 如果对@PathVariable 映射 URL 绑定的占位符 不了解的请自行了解
  • 基本用法示例如下;
  • @RequestMapping("/getUserById/{name}")
        public User getUser(@PathVariable("name") String name){
            return userService.selectUser(name);
        }

假设每个人在问卷星上复制或者分享一套试卷的次数小于100次,按理说这个应该够了,如果密码生成器生成8位,10000次的复制和类似的操作,应该也可以满足的。

搭建基于spring boot的基本项目环境,包括lombok mybatis 数据库,postman进行测试

有两个基本的接口:

代码如下:

package com.example.demo;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Description: 用于生成二维码和简单访问对应的链接
 * @author: LiuYC
 * @date: 2021年04月21日 15:25
 */
@RestController
public class QrcodeController {
    @Resource
    ExamMapper examMapper;

    @RequestMapping("/createQrcode/{name}")
    public String createQrcode(@PathVariable("name") String name) {
        System.out.println("输出的name:");
        System.out.println(name);
//        工具类生成:
        String s = PswUtil.PswUtils();
        String http = "http://localhost:19999/getExam/";
//        更新数据库
        Exam exam = new Exam();
        exam.setA("a");
        exam.setExamId(s);
        exam.setId("3");
        exam.setHead("题目是test");
        exam.setContent("内容是:如何进行测试方案的编写");
        examMapper.insert(exam);
        System.out.println("插入数据库完成:");
//        返回值到前端
        return http + s;
    }

    @RequestMapping("/getExam/{name}")
    public Exam getExam(@PathVariable("name") String name) {
        ExamExample examExample = new ExamExample();
        examExample.createCriteria().andExamIdEqualTo(name);
        List<Exam> exams = examMapper.selectByExample(examExample);
        if (exams.isEmpty()) {
            return null;
        }
        return exams.get(0);
    }
}

完整的整个项目的代码配置请访问个人gitee获取:

https://gitee.com/daka1004/demo

1.生成二维码(链接)的接口

 

2.访问考试接口的链接

 

今天就到这里了,各位看官三连烦请。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在uniapp中生成二维码的方法如下所示: 1. 首先,在uniapp项目中下载源码并解压。 2. 将/components文件夹下的组件复制到项目根目录的/components文件夹下。 3. 在需要生成二维码的页面的vue文件中,添加以下代码: ``` <template> <view style="margin: 40upx;"> <ayQrcode ref="qrcode" :modal="modal_qr" :url="url" @hideQrcode="hideQrcode" :height="300" :width="300" /> </view> </template> <script> import ayQrcode from "@/components/ay-qrcode/ay-qrcode.vue" export default { components: { ayQrcode, }, data() { return { // 二维码相关参数 modal_qr: false, url: 'https://pixabay.com/images/search/?order=ec', // 要生成的二维码值 } }, onLoad() { let that = this; that.showQrcode(); // 一加载生成二维码 }, methods: { // 展示二维码 showQrcode() { let _this = this; this.modal_qr = true; setTimeout(function() { _this.$refs.qrcode.crtQrCode() }, 50) }, // 传入组件的方法 hideQrcode() { this.modal_qr = false; }, } } </script> ``` 以上代码中,template部分包含了一个ayQrcode组件,这个组件用于生成和展示二维码。在script部分,我们引入了ayQrcode组件,并在data中定义了相关参数。onLoad生命周期函数中调用了showQrcode方法,该方法用于展示二维码。showQrcode方法中触发了crtQrCode方法来生成二维码。hideQrcode方法用于隐藏二维码。 4. 最后,在需要使用生成二维码的页面中添加对应的跳转链接,点击链接后即可生成对应的二维码。 请参考上述步骤进行操作,即可在uniapp中生成链接二维码。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

specialApe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值