Spring Boot(四则运算)
产品说明
1.产品介绍
- 首先,这是一个使用Spring Boot写的支持四则运算的API
- 那么,Spring Boot是什么?它是一个基于Spring框架的快速开发框架,可以简化程序的开发过程和部署流程,简单来说,这是可以让我们以最简单的方式写一个软件程序的工具,就好比说已经给你准备好了所有食材和你需要的厨具,然后你只需要按照自己的想法去做你要完成的菜就可以了
- 还有,什么是API?简单来说就是程序之间的接口,也举个例子来说的话,就是当我们宿舍的灯坏了的时候,我们是告诉宿管阿姨报修,然后宿管阿姨再联系维修工人,API在这里就担任了宿管阿姨这个中间角色
2.使用说明
理解了我们这个产品是什么之后,就要考虑它是如何使用的
- 因为我们这次不是固定的加或减的一种,所以我们要把我们要运算的数字和运算符号结合起来,但他们又不是同一个数据类型,这就考虑到了调用,也就是结合培训时Course类,我们同样是在Body的raw中输入数字和符号,系统会给我们返回值,就像下面这样
{ "num1" : 10987654.7, "num2" : 1.2, "operator" : "*" }
我们已经测试过了,这是可以运行的,在Body下面会给出结果 - 除此之外,只有实数是可以运算的,那么输入字符串的时候会怎么样呢?在测试的过程中,如果你在num后面输入了字符,系统给我们的回复是Bad Request,所以它是会检验你输入的是什么的
- 还有要考虑到做除法运算时分母是零的情况,要单独列出
- 最后对于数据溢出的问题,double 所容纳的是64位,已经是最大的了,考虑过String转化成double,但是String因为length是和int对应的,所以String被排除,至于把它放到数组里,也要看我们开的数组是多少位,而且开数组也会占用一定的时间和空间,综合考虑来看,就直接用double了
学习历程
1.文档学习
- 首先,大致的框架是在神秘学姐写的教程和培训时写的Course类的调用来写的,因为在Spring Boot中如果用static的话是表示一些在整个过程中不变的量,而我们所要输入的数字是会变的,所以只能用private来调用数字
- 之后,开始的时候想的方案在试过之后都被否定了,不管是在RequestParam输入数字之后再返回,还是把数字和运算符分开来写都没成功,在参考CSDN的《用Spring Boot实现一个计算器》之后,把他们放到一块来写,也失败了,因为那个涉及了前端的一点变量,但是也借鉴了一点它的将数字算出之后再改成字符串输出,因为总的方法是放在public String里写的,返回值的数据类型要对应
2.知识拓展
- 开始的时候尝试将字符串改成小数,虽然最后去掉了
double num1 = Double.parseDouble();
double num1 = Double.valueOf();
另外将字符串改成整数,可以用
int a = Integer.parseInt();
这个是如果你的字符串里面输入的不是数字是会报错的 - 将小数转化成字符串输出
String result1 = String.valueOf(result);
- 尝试的时候在一篇文档里看到有使用ResponseBody的,虽然最后也没用上,它的作用其实是将java对象转为json格式的数据,与你Body里选的什么格式有关
产品结果
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/main") public class Main { @Autowired MainService mainService; @RequestMapping(value = "/calc", method = RequestMethod.POST) public String calculator(@RequestBody MainService mainService) { //就像上节课写的Course一样,在Body下运行 double result = 0; //先定义一个result得到结果,再将结果转化成字符串,因为数据类型不对应 if (mainService.getOperator() == '+'){ result = mainService.getNum1() + mainService.getNum2(); } if (mainService.getOperator() == '-') { result = mainService.getNum1() - mainService.getNum2(); } if (mainService.getOperator() == '*') { result = mainService.getNum1() * mainService.getNum2(); } if (mainService.getOperator() == '/'){ if (mainService.getNum2() != 0) { result = mainService.getNum1() / mainService.getNum2(); }else { return "除法运算时分母不能为零"; } } String result1 = String.valueOf(result); //将得到的小数转化成字符串输出,与上面的public String相对应 return result1; } } Service类的 package com.example.springboot.controller; import lombok.*; import org.springframework.stereotype.Service; @Data @AllArgsConstructor @NoArgsConstructor @Setter @Getter @Service public class MainService { private Double num1; private Double num2; private Character operator; } //有的可能没有用上 Postman的Body里的raw写 { "num1" : 10987654.7, "num2" : 0, "operator" : "/" } //冒号后面的可以换