本示例项目基于Java SDK + Maven + SpringBoot方式来调用智能合约。
搭建FISCO BCOS 单群组区块链(Air版本),具体步骤参考这里 。
注意: 节点rc4版本以后才支持Table的CRUD接口,之前的版本只能用KV接口的功能。
# 直接从github克隆代码
git clone https://github.com/FISCO-BCOS/spring-boot-crud.git
# 若网络很慢,可从gitee克隆代码
git clone https://gitee.com/FISCO-BCOS/spring-boot-crud
将节点所在目录nodes/${ip}/sdk
下的ca.crt、sdk.crt和sdk.key文件拷贝到项目的src/main/resources/conf
目录下供SDK使用(FISCO BCOS 2.1以前,证书为ca.crt、node.crt和node.key):
设节点路径为~/fisco/nodes/127.0.0.1
,则可使用如下命令拷贝SDK证书:
# 进入项目路径
$ cd spring-boot-crud
# 创建证书存放路径
$ mkdir src/main/resources/conf
# 拷贝SDK证书
$ cp ~/fisco/nodes/127.0.0.1/sdk/* src/main/resources/conf/
spring-boot-crud
包括SDK配置文件(位于src/main/resources/applicationContext.xml
路径)和WebServer配置文件(位于src/main/resources/application.yml
路径)。
需要根据区块链节点的IP和端口相应配置applicationContext.xml
的network.peers
配置项,具体如下:
...
<property name="network">
<map>
<entry key="peers">
<list>
<value>127.0.0.1:20200</value>
<value>127.0.0.1:20201</value>
</list>
</entry>
<entry key="defaultGroup" value="group0" />
</map>
</property>
...
项目中关于SDK配置的详细说明请参考这里。
WebServer主要配置了监听端口,默认为45000
,具体如下:
server:
#端口号
port: 45000
可以使用IDEA导入并编译并安装该项目,也可使用提供的mvnw
脚本在命令行编译项目如下:
# 编译项目
$ bash mvnw compile
# 安装项目,安装完毕后,在target/目录下生成fisco-bcos-spring-boot-crud-0.0.1-SNAPSHOT.jar的jar包
$ bash mvnw install
方法一:
打开IDEA导入并编译该项目,编译成功后,运行AppApplication.java
即可启动spring boot服务。
方法二:
使用bash mvnw install
生成的jar包target/fisco-bcos-spring-boot-crud-0.0.1-SNAPSHOT.jar
启动spring-boot-crud服务:
# 启动spring-boot-crud(启动成功后会输出create client for group success的日志)
$ java -jar ./target/fisco-bcos-spring-boot-crud-0.0.1-SNAPSHOT.jar
spring-boot-crud
基于CRUD insert接口实现了用户信息上链的API,将Person
类型的用户信息上链,API声明如下:
@Data
public class Person {
private String name;
private String age;
private String tel;
}
@PostMapping("/insert")
public ResponseData insert(@RequestBody Person person) {
crudClient.insert(person.getName(),person.getAge(), person.getTel());
return ResponseData.success("新增成功");
}
使用curl工具访问接口如下:
# 这里假设WebServer监听端口为45000
# 将用户fisco的信息上链,其中name为fisco, age为6,tel为123456789
$ curl -H "Content-Type: application/json" -X POST --data '{"name":"fisco", "age":"6", "tel":"123456789"}' http://localhost:45000/insert
# 返回新增成功的信息
{"code":200,"msg":"新增成功","data":null}
spring-boot-crud
基于CRUD select接口实现了链上查询用户信息的API,基于用户名查询用户信息,API声明如下:
@GetMapping("/query/{name}")
public ResponseData query(@PathVariable("name") String name) throws Exception {
return ResponseData.success(crudClient.query(name));
}
使用curl工具访问接口如下:
# 这里假设WebServer监听端口为45000
# 查询用户名为fisco的用户信息
$ curl http://localhost:45000/query/fisco
# 返回用户fisco的具体信息
{"code":200,"msg":null,"data":{"value1":"fisco","value2":"6","value3":"123456789","size":3}}
spring-boot-crud
基于CRUD update接口实现了用户信息链上更新的API,API声明如下:
@PutMapping("/update")
public ResponseData update(@RequestBody Person person){
crudClient.edit(person.getName(),person.getAge(), person.getTel());
return ResponseData.success("修改成功");
}
使用curl工具访问接口如下:
# 这里假设WebServer监听端口为45000
# 更新fisco用户的信息,将其age修改为10,tel修改为123
$ curl -H "Content-Type: application/json" -X PUT --data '{"name":"fisco", "age":"10", "tel":"123"}' http://localhost:45000/update
# 返回成功信息
{"code":200,"msg":"修改成功","data":null}
# 再次查询fisco信息:
$ curl http://localhost:45000/query/fisco
# 返回信息如下,用户fisco的age成功修改为10,tel成功修改为123
{"code":200,"msg":null,"data":{"value1":"fisco","value2":"10","value3":"123","size":3}}
spring-boot-crud
基于CRUD delete接口实现了用户信息链上删除的API,该API根据用户名删除用户信息,API声明如下:
@DeleteMapping("/remove/{name}")
public ResponseData remove(@PathVariable("name") String name){
crudClient.remove(name);
return ResponseData.success("删除成功");
}
使用curl工具访问接口如下:
# 这里假设WebServer监听端口为45000
# 删除用户fisco的信息:
$ curl -X DELETE http://localhost:45000/remove/fisco
# 返回删除成功的提示
{"code":200,"msg":"删除成功","data":null}
# 再次查询fisco信息:
$ curl http://localhost:45000/query/fisco
# 此时已经无法查询到用户fisco的信息
{"code":200,"msg":null,"data":{"value1":"fisco","value2":"","value3":"","size":3}}
spring-boot-crud
基于KV set接口实现了用户信息上链的API,将Person
类型的用户信息上链,API声明如下:
@Data
public class Person {
private String name;
private String age;
private String tel;
}
@PostMapping("/set")
public ResponseData set(@RequestBody Person person) {
kvClient.set(person.getName(), person.getAge());
return ResponseData.success("新增成功");
}
使用curl工具访问接口如下:
# 这里假设WebServer监听端口为45000
# 将用户fisco的信息上链,其中name为fisco, age为6
$ curl -H "Content-Type: application/json" -X POST --data '{"name":"fisco", "age":"6"}' http://localhost:45000/set
# 返回新增成功的信息
{"code":200,"msg":"新增成功","data":null}
spring-boot-crud
基于KV get接口实现了链上查询用户信息的API,基于用户名查询用户信息,API声明如下:
@GetMapping("/get/{name}")
public ResponseData get(@PathVariable("name") String name) throws Exception {
return ResponseData.success(kvClient.get(name));
}
使用curl工具访问接口如下:
# 这里假设WebServer监听端口为45000
# 查询用户名为fisco的用户信息
$ curl http://localhost:45000/get/fisco
# 返回用户fisco的具体信息
{"code":200,"msg":null,"data":{"value1":"true","value2":"6","size":2}}
FISCO BCOS开源社区是国内活跃的开源社区,社区长期为机构和个人开发者提供各类支持与帮助。已有来自各行业的数千名技术爱好者在研究和使用FISCO BCOS。如您对FISCO BCOS开源技术及应用感兴趣,欢迎加入社区获得更多支持与帮助。
- 了解FISCO BCOS项目,请参考FISCO BCOS文档 。
- 了解Java SDK项目,请参考Java SDK文档 。
- 了解spring boot,请参考Spring Boot官网 。