大家好,又见面了,我是你们的朋友全栈君。
强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan
【前言】
最近收到一个需求,在管理后台对系统中的金额进行操作时,对操作的金额需要进行相关校验,如果不校验,在进行相关的计算时就可能会出问题。
【BigDecimal 校验格式】
一、业务需求
前端接收到金额传给后端时需要对金额的格式进行校验,校验规则:如果有小数,则小数的位数不能超过两位;如:
1888 符合要求
1888.1 符合要求
1888.12 符合要求
1888.123 不符合要求
二、相关代码及相应测试
1、代码
(1)工具类
/*
* Copyright (c) 2019. zhanghan_java@163.com All Rights Reserved.
* 项目名称:实战SpringBoot
* 类名称:MoneyUtil.java
* 创建人:张晗
* 联系方式:zhanghan_java@163.com
* 开源地址: https://github.com/dangnianchuntian/springboot
* 博客地址: https://zhanghan.blog.csdn.net
*/
package com.zhanghan.zhboot.util;
import java.util.regex.Pattern;
public class MoneyUtil {
//两位小数金额校验
public static boolean judgeTwoDecimal(Object obj) {
boolean flag = false;
try {
if (obj != null) {
String source = obj.toString();
// 判断是否是整数或者是携带一位或者两位的小数
Pattern pattern = Pattern.compile("^[+]?([0-9]+(.[0-9]{1,2})?)$");
if (pattern.matcher(source).matches()) {
flag = true;
}
}
} catch (Exception e) {
e.getMessage();
}
return flag;
}
}
(2)测试的Request
/*
* Copyright (c) 2019. zhanghan_java@163.com All Rights Reserved.
* 项目名称:实战SpringBoot
* 类名称:CheckMoneyRequest.java
* 创建人:张晗
* 联系方式:zhanghan_java@163.com
* 开源地址: https://github.com/dangnianchuntian/springboot
* 博客地址: https://zhanghan.blog.csdn.net
*/
package com.zhanghan.zhboot.controller.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@ApiModel("校验金额演示请求实体")
@Data
public class CheckMoneyRequest {
@ApiModelProperty(value = "金额")
private BigDecimal money;
}
(3)测试Controller
/*
* Copyright (c) 2019. zhanghan_java@163.com All Rights Reserved.
* 项目名称:实战SpringBoot
* 类名称:CheckMoneyController.java
* 创建人:张晗
* 联系方式:zhanghan_java@163.com
* 开源地址: https://github.com/dangnianchuntian/springboot
* 博客地址: https://zhanghan.blog.csdn.net
*/
package com.zhanghan.zhboot.controller;
import com.zhanghan.zhboot.controller.request.CheckMoneyRequest;
import com.zhanghan.zhboot.util.MoneyUtil;
import com.zhanghan.zhboot.util.wrapper.WrapMapper;
import com.zhanghan.zhboot.util.wrapper.Wrapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
@RestController
@Api(value = "演示校验金额控制器", tags = {"演示校验金额控制器"})
public class CheckMoneyController {
@ApiOperation(value = "演示金额校验", tags = {"演示校验金额控制器"})
@RequestMapping(value = "/check/money", method = RequestMethod.POST)
public Wrapper lombok(@RequestBody CheckMoneyRequest checkMoneyRequest) {
BigDecimal money = checkMoneyRequest.getMoney();
//校验金额是否符合要求
boolean legal = MoneyUtil.judgeTwoDecimal(money);
Map<String, Object> map = new HashMap();
map.put("money", money);
map.put("islegal",legal);
return WrapMapper.ok(map);
}
}
2、测试结果
(1)符合条件:
(2)不符合条件
【总结】
1、金额一定要有检验,不然进入系统中不符合要求的数据,在进行相关计算的时候会出问题,有时每笔订单只差几分但是订单量多了,差的钱就多了;
2、做程序需时刻谨慎,什么时候都不可大意。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/145024.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...