一个简单的后端服务(实现一个简单的物联网系统-2)

Posted by Beyonderwei on 2018-04-23
Words 1k and Reading Time 4 Minutes
Viewed Times

一、简介

  可以说站在Spring Boot的肩膀上,相对于我之前用最古老的servlet,完成一个简单的后台服务实在变得太容易太容易。但是对于一个完全不了解的人可以参考目录中的学习方法。对于实现远程浇花的功能,只需要处理APP 和 CC3200 发送过来的 get 、post 请求即可。

二、说明

  ①.Spring Boot 只是一个框架,通过联网帮助我们完成了各种配置,简化开发。
  ②.具体详细的步骤可以在学习SpringBoot的过程中不断实践。
注意:IDEA一定要用专业版,社区版的是不能构建SpringBoot项目的,如下图社区版根本没有红色圈中的那项:

三、数据库

  当然后台要负责与数据库进行交互,花卉的信息也全都存放在数据库上。后台的代码就是要对数据库进行增、删、改、查等操作。我用的是MySQL。直接装,或者用Docker。

四、后台服务代码

  1. Cotroller部分:这里即包含了APP的后台服务,也包含了CC3200的后台服务,后面不再赘述。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    @Controller
    public class FlowerManagerController {

    @Autowired
    JdbcTemplate jdbcTemplate;


    /*-------------------处理 APP 与后台的交互-----------------*/

    /**
    * 处理 APP 发送过来的 GET 请求 -> 查询花卉的所有信息返回给 APP
    *
    * @param flower_name
    * @return
    */
    @ResponseBody //用于将数据写出去
    @GetMapping("/appQuery") //这个方法用来处理query请求
    public List<Map<String, Object>> appGetResponse(@RequestParam String flower_name) {
    //字符串拼接的方法来实现sql语句中嵌套变量
    String querySql = "select * From flowers where name =" + "'" + flower_name + "'";
    List<Map<String, Object>> list = jdbcTemplate.queryForList(querySql);
    System.out.println(list);
    return list;
    }

    /**
    * 处理 APP POST 给服务器的数据 ->更新数据库中的浇水量 bulk
    */
    @ResponseBody //用于接收APP post 过来的数据
    @PostMapping("/appPost") //这个方法用来处理App的post请求
    public void appPostResponse(@RequestBody String flower_info) throws JSONException {
    /*--更改花卉的浇水量--*/
    String flower_name;
    int bulk;
    //1.解析post过来的数据
    JSONObject jsonObject = new JSONObject(flower_info);
    mFlower_name = jsonObject.getString("name");
    mBulk = jsonObject.getInt("bulk");

    //2.根据花卉名称和浇水量更新DB的数据
    String updateSql = "update flowers set bulk =" + "'" + bulk + "'" + " WHERE name =" + "'" + flower_name + "'";
    jdbcTemplate.update(updateSql);
    }


    /*-----------------------处理 CC3200 与后台的交互-------------------*/

    /**
    * 处理CC3200 发送过来的 GET 请求 ->查询花卉的浇水量返回给CC3200
    */
    @ResponseBody //用于将数据写出去
    @GetMapping("/cc3200Query") //这个方法用来处理query请求
    public Map<String, Object> cc3200GetResponse(@RequestParam int monitor_id) {

    //字符串拼接的方法来实现sql语句中嵌套变量
    String querySql = "select * From flowers where monitor_id =" + "'" + monitor_id + "'";
    //这样返回的是一个map 而不是 list 的形式更方便CC3200那边去解析
    Map<String, Object> map =jdbcTemplate.queryForMap(querySql);
    System.out.println(map);
    return map;
    }

    /**
    * 处理CC3200 POST 给服务器的数据 ->更新花卉的状态信息
    */
    @ResponseBody //用于接收CC3200 post 过来的数据
    @PostMapping("/cc3200Post") //这个方法用来处理CC3200Post请求
    public void CC3200PostResponse(@RequestBody String flower_info) throws JSONException {
    /*--更新花卉的状态信息--*/
    int monitorID;
    float co2;
    float temperature;
    float humidity;

    //1.解析post过来的数据
    JSONObject jsonObject = new JSONObject(flower_info);
    monitorID = jsonObject.getInt("monitorID");
    co2 = (float) jsonObject.getDouble("co2");
    temperature = (float) jsonObject.getDouble("temperature");
    humidity = (float) jsonObject.getDouble("humidity");

    //2.根据花卉监测系统ID更新数据库的数据
    String updateSql =
    "update flowers set co2 =" + "'" + co2 + "'" +","+
    "temperature ="+"'" + temperature + "'" +","+
    "humidity ="+"'" + humidity + "'" +
    " WHERE monitor_id ="+ "'" + monitorID + "'";
    jdbcTemplate.update(updateSql);
    }

    }
  2. application.yaml 部分:这里根据实际的情况配置即可
    1
    2
    3
    4
    5
    6
    spring:
    datasource:
    username: root
    password: 123456
    url: jdbc:mysql://公网IP或域名:3306/数据库名
    driver-class-name: com.mysql.cj.jdbc.Driver

五、学习路线(仅供参考)

  1. pringBoot 我是通过学习观看 尚硅谷 的Springboot视频学习的,下载地址可以搜哦,有人上传到网盘了,或者哔哩哔哩上也有,而IDEA的使用关注他的微信公众号就可以免费下载,个人感觉还是不错的。反正免费嘛。
  2. 在Ubuntu 上使用 Docker 可以参考下面的链接(安装MySQL也是很方便的)。
   https://cloud.tencent.com/developer/article/1350956


本文为作者原创文章,未经作者允许不得转载。

...

...

00:00
00:00