软件园学生在线

  • {{ item.name }}
  • 2023试用期

登录与注册

后端一 杨师玉

  • yangshiyu10
  • 2023-10-29
  • 0

产品说明


如何使用?


  • 首先,确保本 API 已加载。
  • 然后,打开 page.html 。
  • 在输入框中输入数字并点击提交即可使用。

特殊的考虑

  1. 对于输入不合法的问题,我写了一个方法来判断输入是否为一个数字,判断标准是:

    • 只能有数字和一个小数点
    • 小数点不能位于首位
  2. 对于超出范围的问题,使用了 BigDecimal 类来解决。


学习历程


文档学习


看了看有关 BigDecimal 和 BigInteger 的文档,考虑到要支持小数运算,所以使用了前者。


其它知识点


学会了如何给后端程序加前端,并能通过前端而不是 URL 来传值,使交互更友好。

好像,我在判断输入是否合法的时候也防止了通过 GET 请求的参数进行注入攻击。


代码


Controller

package com.example.zuoye.controller;

import com.example.zuoye.service.MainService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.concurrent.atomic.AtomicLong;

@RestController
@RequestMapping("/main")
public class MainController {

    @Autowired
    MainService mainService;

    private  final AtomicLong counter = new AtomicLong();

    @GetMapping("/greeting")
    public MainService.Greeting greeting(@RequestParam(value="name",defaultValue = "world") String name){
        return new MainService.Greeting(counter.incrementAndGet(),String.format("Hello %s!",name));
    }

    @RequestMapping(value = "/add",method = RequestMethod.POST)//加法
    public String add(@RequestParam String a, @RequestParam String b){
        return mainService.add(a,b);
    }

    @RequestMapping(value = "/subtract",method = RequestMethod.POST)//减法
    public String subtract(@RequestParam String a, @RequestParam String b){
        return mainService.subtract(a,b);
    }

    @RequestMapping(value = "/multiply",method = RequestMethod.POST)//乘法
    public String multiply(@RequestParam String a, @RequestParam String b){
        return mainService.multiply(a,b);
    }

    @RequestMapping(value = "/divide",method = RequestMethod.POST)//除法
    public String divide(@RequestParam String a, @RequestParam String b){
        return mainService.divide(a,b);
    }
}

Service

package com.example.zuoye.service;

import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.math.RoundingMode;

@Service
public class MainService {
    public record Greeting(long id,String content){
    }

    public boolean PanduanShuruHafa(String a){//判断输入是否合法
        int length=a.length();
        boolean ifDian = false;
        for(int i=0;i<length;i++){
            if(a.charAt(i) < '0' || a.charAt(i) > '9'){
                if(ifDian) return false;
                else if(a.charAt(i) == '.') ifDian = true;
                else return false;
            }
        }
        return a.charAt(0) != '.';
    }
    //四则运算都是先把输入转化成BigDecimal对象,然后利用其自带的方法进行运算。
    public String add(String a,String b){
        if(!PanduanShuruHafa(a) || !PanduanShuruHafa(b))return "输入不合法!";
        BigDecimal x1 =new BigDecimal(a);
        BigDecimal x2 =new BigDecimal(b);
        return x1.add(x2).toString();
    }

    public String subtract(String a,String b){
        if(!PanduanShuruHafa(a) || !PanduanShuruHafa(b))return "输入不合法!";
        BigDecimal x1 =new BigDecimal(a);
        BigDecimal x2 =new BigDecimal(b);
        return x1.subtract(x2).toString();
    }

    public String multiply(String a,String b){
        if(!PanduanShuruHafa(a) || !PanduanShuruHafa(b))return "输入不合法!";
        BigDecimal x1 =new BigDecimal(a);
        BigDecimal x2 =new BigDecimal(b);
        return x1.multiply(x2).toString();
    }

    public String divide(String a,String b){
        if(!PanduanShuruHafa(a) || !PanduanShuruHafa(b))return "输入不合法!";
        BigDecimal x1 =new BigDecimal(a);
        BigDecimal x2 =new BigDecimal(b);
        return x1.divide(x2, 8, RoundingMode.HALF_UP).toString();
    }

}
yangshiyu10
yangshiyu10
© 2025 软件园学生在线
Theme by Wing