项目实训4——初步完成用户上传json处理

我们项目是这样提供用户上传数据功能的:用户上传json数据,系统验证该json数据格式是否符合管理员定义的标准,如果符合,则将其插入数据中心数据库的相关表中。实现这个功能共包含以下几个难点:解析json数据,配置多个数据源,多个数据源的使用,将解析好的JSONObject对象转化成操作数据库的sql语句。

一、解析json数据

我采用了FastJson提供的对象JSONObject进行json解析。
1.1配置
在pom.xml中添加

<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.9.3</version>
</dependency>
<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.2.1</version>
</dependency>
<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.6</version>
</dependency>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.1</version>
</dependency>
<dependency>
    <groupId>net.sf.ezmorph</groupId>
    <artifactId>ezmorph</artifactId>
    <version>1.0.6</version>
</dependency>
<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.2.3</version>
    <classifier>jdk15</classifier>
    <!-- jdk版本 -->
</dependency>
<!-- Json依赖架包下载结束 -->

这里我遇到了一个问题我的jdk的版本为11,但jdk9以上的版本不兼容,所以我将jdk的版本改为了jdk1.8.
1.2.使用
解析String为定义好的UserJson对象。

text = "{\"dbname\": \"student\",\"chartsname\": [\"tijian\", \"jibenxinxi\"],
\"metas\": [{\"tijian\": {\"des\": \"我的天哪\"},\"jibenxinxi\": 
{\"id\": \"1\",\"tid\": \"1\",\"wage\": \"1.5\",\"des\": \"我的天哪!!\"}}, 
{\"tijian\": {\"des\": \"学生xxx\"},\"jibenxinxi\": {\"id\": \"2\",\"tid\": \"1\",
\"wage\": \"8.9\",\"des\": \"xueshengxxxx\"}}]}";
 UserJson userJson = JSONObject.parseObject(text,UserJson.class);

调用getJSONObject()方法可以得到嵌套的json对象,调用get()方法可以得到value。

二、配置多个数据源
因为我们的系统涉及多个数据库,所以需要在springboot项目中对这些数据源进行配置。
在application.properties文件中

spring.datasource.dynamic.datasource.master.url=jdbc:mysql://localhost:3306/sdudatamanagement?useSSL=false&serverTimezone=UTC
spring.datasource.dynamic.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.dynamic.datasource.master.username=root
spring.datasource.dynamic.datasource.master.password=。。。。
spring.datasource.dynamic.primary=master//主数据库,必须
spring.datasource.dynamic.strict=true
//从数据库,student为数据库名
spring.datasource.dynamic.datasource.student.url=jdbc:mysql://localhost:3306/student?useSSL=false&serverTimezone=UTC
spring.datasource.dynamic.datasource.student.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.dynamic.datasource.student.username=root
spring.datasource.dynamic.datasource.student.password=。。。。。。。

三、使用多个数据源

 @DS("student")
 public boolean uploadData(String text){}

在使用student数据库的方法前加上@DS注释即可,这里需要注意这个方法中的所有sql语句,以及这个方法调用的所有操作数据库的方法,操作的都是student数据库。

为了初始化我们系统数据库中保存的验证用户上传json正确性的数据,我分开写了一个初始化方法,先对需要的来自系统数据库中的数据进行初始化。

四、将解析好的JSONObject对象转化成操作数据库的sql语句

@Override
@DS("student")
public boolean uploadData(String text) {
text = "{\"dbname\": \"student\",\"chartsname\": [\"tijian\", \"jibenxinxi\"],
\"metas\": [{\"tijian\": {\"des\": \"我的天哪\"},\"jibenxinxi\": 
{\"id\": \"1\",\"tid\": \"1\",\"wage\": \"1.5\",\"des\": \"我的天哪!!\"}}, 
{\"tijian\": {\"des\": \"学生xxx\"},\"jibenxinxi\": {\"id\": \"2\",\"tid\": \"1\",
\"wage\": \"8.9\",\"des\": \"xueshengxxxx\"}}]}";
    UserJson userJson = JSONObject.parseObject(text,UserJson.class);

    //字段相关
    for (JSON meta : userJson.getMetas()) {
        JSONObject jsonObject = JSONObject.parseObject(String.valueOf(meta));
        for (List<PDetail> chartname : this.chartnames2) {
            String metas = "";
            String values = "";
            String cname = "";
            for (PDetail pDetail : chartname) {
                cname = pDetail.getChartname();
                metas+=pDetail.getMeta()+",";
                String str = String.valueOf(jsonObject.getJSONObject(pDetail.getChartname()).get(pDetail.getMeta()));
                switch (pDetail.getMetatype()){
                    case "int":
                    case "float":
                        values+=str+",";
                        break;
                    default:
                        values+="'"+str+"'"+",";
                        break;
                }
            }
            metas = metas.substring(0,metas.length()-1);
            values = values.substring(0,values.length()-1);
            insertData(cname,metas,values);
        }
    }
    return true;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值