转换类型的时候报错For input String:“null“

本文探讨了前端通过Ajax传递参数到后端时遇到的null值问题,当前端传递null值时,后端在尝试将字符串转换为Integer或其他数字类型时会导致错误。为解决这个问题,前端在构建请求参数时需检查值是否为null,若为null则不包含在请求字符串中。后端在接收参数时,需考虑到可能接收到的null字符串。这个最佳实践可以避免因空值导致的后台服务异常。
摘要由CSDN通过智能技术生成

前端传参`

function onExportExcel() {
        table.set('selectGroup-table');
        $.modal.confirm("确定导出所有详细的数据吗?", function () {
            $.modal.loading("正在导出数据,请稍后...");
            $.post("collectionscharges/exports",
            "chargeKindID=" + chageKindIDs+"&"
            + "outOperatorID="+ outOperatorIDs+"&"
            + "maxID="+maxIDs+"&"
            +"minID="+minIDs, function (result) {
                if (result.code == web_status.SUCCESS) {
                    window.location.href = ctx + "common/download?fileName=" + encodeURI(result.msg) + "&delete=" + true;
                } else if (result.code == web_status.WARNING) {
                    $.modal.alertWarning(result.msg)
                } else {
                    $.modal.alertError(result.msg);
                }
                $.modal.closeLoading();
            });
        });
    }

后端接收参数

  @RequiresPermissions("system:user:export")
    @PostMapping("/exports")
    @ResponseBody
    public AjaxResult exports(@RequestParam(value = "chargeKindID",required = false)Integer chargeKindID,
                              @RequestParam(value = "outOperatorID",required = false)Integer outOperatorID,
                              @RequestParam(value = "maxID",required = false)Integer maxID,
                              @RequestParam(value = "minID",required = false)Integer minID) {
        CollectionsChargesClassifiedStatisticsVO collectionsChargesClassifiedStatisticsVO = new CollectionsChargesClassifiedStatisticsVO();
        if(chargeKindID != null){
            collectionsChargesClassifiedStatisticsVO.setChargeKindID(chargeKindID);
        }
        if(outOperatorID != null ){
            collectionsChargesClassifiedStatisticsVO.setOutOperatorID(outOperatorID);
        }
        if(maxID!=null){
            collectionsChargesClassifiedStatisticsVO.setMaxID(maxID);
        }
        if(minID!=null){
            collectionsChargesClassifiedStatisticsVO.setMinID(minID);
        }
        HttpSession session = getRequest().getSession();
        collectionsChargesClassifiedStatisticsVO.setParams((Map<String, Object>) session.getAttribute("time"));
        List<CollectionsChargesDetailVO> list = collectionsChargesDetailSercice.selectidname(collectionsChargesClassifiedStatisticsVO);
        ExcelUtil<CollectionsChargesDetailVO> util = new ExcelUtil<CollectionsChargesDetailVO>(CollectionsChargesDetailVO   .class);
        return util.exportExcel(list, "车辆出入详细数据");
    }

前端传参可一个null类型的值,通过json传入过去,但是前端接收的时候使用Interge和String都报错了,由于数据传输时,是不能直接传对象的,所以在真正传值的时候,要转换成JSON字符串,无论什么类型都要转换成字符串或数字。
等到后台接收到参数的时候,其实后台也不知道传过来的是什么类型,只能按照规定好的参数类型,尝试对字符串进行强制转换。
于是,如果出现了null,前台就只能转化成”null”,这就导致了后台只能接收到”null”,甚至无法区分null和”null”。
更严重的问题在于:如果后台接收的参数是数字类型(Long、Int、Double),而前台传入是null的话,由于字符串强制转换为数字失败,会直接导致后台500.并且前端使用不为null不能进行判断
所以在前端传值的时候就需要将null的去掉

function onExportExcel() {
        table.set('selectGroup-table');
        $.modal.confirm("确定导出所有详细的数据吗?", function () {
            $.modal.loading("正在导出数据,请稍后...");
            $.post("collectionscharges/exports",
                (chageKindIDs == null ? "":("chargeKindID=" + chageKindIDs))+"&"
                + (outOperatorIDs == null ? "":("outOperatorID="+ outOperatorIDs))+"&"
                + (maxIDs == null ? "":("maxID="+maxIDs))+"&"
                    +(minIDs==null? "":("minID="+minIDs)), function (result) {
                if (result.code == web_status.SUCCESS) {
                    window.location.href = ctx + "common/download?fileName=" + encodeURI(result.msg) + "&delete=" + true;
                } else if (result.code == web_status.WARNING) {
                    $.modal.alertWarning(result.msg)
                } else {
                    $.modal.alertError(result.msg);
                }
                $.modal.closeLoading();
            });
        });
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值