需求
主要分为三个对象。
用户(需求:检验疫苗是否合格)
国家管理(需求:管理生产厂商;追溯问题疫苗)
生产厂商(需求:产生疫苗后记录信息;疫苗使用后信息变更)
如何使用的springboot
@RequestParam
@RequestParam接收的参数是来自HTTP请求体或请求url的QueryString中。
通俗点说,就是将网络请求的字符,转化为控制器普通函数的参数
将请求参数绑定到你控制器的方法参数上
@RestController
在Spring中@RestController的作用等同于@Controller + @ResponseBody。
返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面
@Controller注解
在一个类上添加@Controller注解,表明了这个类是一个控制器类。但想要让这个类成为一个处理请求的处理器光有@Controller注解是不够的,他还需要进一步修炼才能成为一个处理器。
使用了controller之后,需要将controller注入到spring的容器中,如bean
1.在spring容器中创建该类的实例:
在spring容器中注入单个bean
<bean class="test.controller.MyController" />
2.将@Controller注解的类注入Spring容器中,只是该类成为处理器的第一步,想要修炼大成,还需要在该类中添加注解@RequestMapping。
@RequestMapping注解是用来映射请求的,即指明处理器可以处理哪些URL请求,该注解既可以用在类上,也可以用在方法上。
当使用@RequestMapping标记控制器类时,方法的请求地址是相对类的请求地址而言的;当没有使@RequestMapping标记类时,方法的请求地址是绝对路径。
@RequestMapping的地址可以是url变量,并且通过@PathVariable注解获取作为方法的参数。也可以是通配符来筛选请求地址。具体的使用方法不是本次的重点,有兴趣的可以看
@ResponseBody注解
@ResponseBody表示方法的返回值直接以指定的格式写入Http response body中,而不是解析为跳转路径。
格式的转换是通过HttpMessageConverter中的方法实现的,因为它是一个接口,因此由其实现类完成转换。
如果要求方法返回的是json格式数据,而不是跳转页面,可以直接在类上标注@RestController,而不用在每个方法中标注@ResponseBody,简化了开发过程。
@RequestMapping。
作用:将请求和处理请求的控制器方法关联起来,建立映射关系。
位置:
1、标识类:设置映射请求的请求路径的初试信息
2、表示方法:设置映射请求的请求路径的具体信息
在本项目中我们将库提供的post,get,delete方法,映射到几个不同的函数中,由控制器进行管理
同时用@requestparam,将网络请求参数,转化成管理函数中的参数;我们在类前,标志@restcontroller,使之成为控制类,方便项目开发。
如何对区块链加密
java.security类提供加密服务,我们指定sha-256标准,也是区块链中比较普遍的加密方法
如何知道区块链被篡改?
首先,在生成新的区块时,我们需要利用上一块的哈希值,生成本块的哈希值
其次,在插入新的区块时,我们必须保证这个链本身是完整的,所以我们会先检验期望值(插入一个块后的下标值)与当前链上最新块节点的下标值,如果不相等,则那么出错;检验最新一块哈希值是否被篡改,若篡改,则出错。
如何创造新的代理商?
前端,生成代理商的地址、端口、用户号用 sendHttpRequest()发到后端,里面是post方法
后端接收到信息,创造一个新的代理商对象,调用startHost()开启这个端口,将其放入代理商列表。
如何删除一个代理商?
前端,将要删除的厂商的名字用 sendHttpRequest()发到后端,里面是delete方法
后端接收到消息,首先用名字去找到该厂商,同时调用Stophost()函数,关闭该端口,将其从开发商队列中移除。
如何所有用户都能查询到所有信息?
当前端发出刷新指令后,后端返回所有开发商列表。然后前端将json数据,转化为代理商数组,循环输出。
【如何转换JSON数据,用Java中JSON对象中的函数】
如何体现代理商生产疫苗?
每次疫苗代理生产商生产出一个疫苗之后,将会再区块链上添加一个区块,其上记录了该疫苗的序列号,使用情况,有效日期等信息。
当前端Produce Vaccines的按钮被点击后,spring框架将会跳转到url:agent/mine将生成新疫苗的请求传递到后端。
然后由后端创建新的区块,在计算前一个区块的哈希值之后后端通过调用Block类的构造函数创建一个新的区块,并将该区块广播向整个区块链。之后返回该区块信息,然后由前端刷新界面。
前端生成疫苗按键,被点后,由springboot返回需求,后端首先调用block类的函数生成block对象,然后向整个链广播。之后返回该块信息,显示在前端。
基层注射过疫苗后
前端指定用序列号为多少的疫苗注射,返回序列号
后端在接收前端传递的序列号之后,通过循环在整条区块链上查询该序列号对应的区块,如果存在该序列号,则说明将要使用的疫苗存在,反之则不存在疫苗无效。之后,再由后端创建一个具有相同序列号但isUsed为True的新的区块。之后再由前端输出处理结果。
疫苗验证与溯源
依旧是由后端向前端传递疫苗的序列号。主要的检测流程为:
首先,遍历整个区块链,如果该序列号不存在,则说明该序列号对应的疫苗无效。返回“Invalid vaccine”;
然后,比较当前的日期与该疫苗的失效日期。如果当前日期超过了失效日期,则说明该疫苗已经过期。返回“Expired vaccine”;
最后,需要判断疫苗是否已经被使用过。因为一旦疫苗被使用,则意味着区块链上存在着两个相同序列号的区块。此时则会跳过第一区块,然后判断疫苗是否已经被使用过。如果疫苗被使用过则返回“Vaccine has been used”;如果疫苗未被使用过或者是未第二次检测到序列号则返回“Valid vaccine”。
