实践出真知:MVEL表达式中for循环的坑

目录标题

  • 背景
  • MVEL脚本(有问题的)
  • MVEL脚本(正确的)
  • 结论分析

背景

需要从一个URL的拼接参数中解析出id的值并输出

比如:
存在URL=https://xxxxxxxxxx?id=999999&type=123&name=345
然后需要输出id=999999

MVEL脚本(有问题的)

入参:parseThisUrl=https://xxxxxxxxxx?id=999999&type=123&name=345

import java.net.URL;
import java.util.*;def parseQuery(query) {params = new HashMap();if (query != null) {String[] pairs = query.split("&");for(pair : pairs) {String[] kvs = pair.split("=");if(kvs.length == 2){params.put(kvs[0], kvs[1]);}}}return params;
}// 解析URL
URL parsedUrl = new URL(parseThisUrl);
// 获取查询字符串
String query = parsedUrl.getQuery();
// 解析查询字符串
parameters = parseQuery(query);
//获取goodId
goodId = parameters.getOrDefault("id","0");return [ "goodId" : Long.valueOf(goodId) ];

执行的时候就报错了,具体错误信息如下:

[Error: null pointer: parseQuery(query)]

在这里插入图片描述

MVEL脚本(正确的)

入参:parseThisUrl=https://xxxxxxxxxx?id=999999&type=123&name=345

import java.net.URL;
import java.util.*;def parseQuery(query) {params = new HashMap();if (query != null) {String[] pairs = query.split("&");String[] kvs;for(pair : pairs) {kvs = pair.split("=");if(kvs.length == 2){params.put(kvs[0], kvs[1]);}}}return params;
}// 解析URL
URL parsedUrl = new URL(parseThisUrl);
// 获取查询字符串
String query = parsedUrl.getQuery();
// 解析查询字符串
parameters = parseQuery(query);
//获取goodId
goodId = parameters.getOrDefault("id","0");return [ "goodId" : Long.valueOf(goodId) ];

很突然啊,偷袭,一下就成功了!!!
在这里插入图片描述

结论分析

感觉是这个原因,for循环里面是一个单独的闭包空间,你里面使用的所有的变量都需要提前定义好,不然的话这个闭包空间里面是没有这个变量定义的,然后你的所有针对这个变量的操作就都会跑出空指针异常!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/7366.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【数据集】【YOLO】【目标检测】道路裂缝数据集 5466 张,YOLO/VOC格式标注!

数据集介绍 【数据集】道路裂缝数据集 5466 张,目标检测,包含YOLO/VOC格式标注。数据集中包含一种分类,检测范围城市道路裂缝、高速道路裂缝、乡村道路裂缝。 戳我头像获取数据,或者主页私聊博主哈~ 一、数据概述 道路裂缝检测…

SCRM开发新趋势打造高效客户关系管理系统

内容概要 在当今数字化的浪潮中,客户关系管理(SCRM)系统的开发正迎来了突破性的新趋势。传统的客户管理方式已经无法满足现代企业对灵活性与高效性的需求,我们必须顺应时代的发展,采用更为智能化的解决方案。SCRM开发…

WordPress在windows下安装

目录 一、WordPress下载官网 二、配置 WordPress 三、安装WordPress 1、打开测试域名安装 2、创建数据库 3、配置数据库账号密码 4、设置后台账号密码 5、安装成功后点登录即可 一、WordPress下载官网 点击下面下载链接,下载安装包,并且php和mys…

Pytorch(二)

五、torchvision 5.1 torchvision中的Datasets 5.1.1 下载数据集 torchvision 文档列出了很多科研或者毕设常用的一些数据集,如入门数据集MNIST,用于手写文字。这些数据集位于torchvision.datasets模块,可以通过该模块对数据集进行下载&am…

二分查找算法—C++

一,二分查找 1,题目描述 在一个给定的有序数组中,查找目标值target,返回它的下标。如果不存在,返回-1 2,思路 解法一:暴力枚举,遍历整个数组,直到找到目标值&#xff…

PyQt5实战——UTF-8编码器UI页面设计以及按钮连接(五)

个人博客:苏三有春的博客 系类往期文章: PyQt5实战——多脚本集合包,前言与环境配置(一) PyQt5实战——多脚本集合包,UI以及工程布局(二) PyQt5实战——多脚本集合包,程序…

Call For Speaker! |2025中国国际音频产业大会(GAS)演讲嘉宾征集令启动!

2025中国国际音频产业大会(GAS)已定档2025年3月26-27日。 GAS 2025演讲嘉宾征集正式启动!我们将再次汇聚音频领域的专家和行业领袖,力求为与会者呈现一场内容丰富、精彩纷呈的知识盛宴。 SPRGASING FESTIVAL 如果 您在音频领域…

安装docker-compose

安装包地址https://github.com/docker/compose/releases wget https://github.com/docker/compose/releases/download/v2.30.3/docker-compose-Linux-x86_64 mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose chmod x /usr/local/bin/docker-compose docker-com…

【355】基于springboot的助农管理系统

助农管理系统的设计与实现 摘要 近年来,信息化管理行业的不断兴起,使得人们的日常生活越来越离不开计算机和互联网技术。首先,根据收集到的用户需求分析,对设计系统有一个初步的认识与了解,确定助农管理系统的总体功…

计算机网络——TCP篇

TCP篇 基本认知 TCP和UDP的区别? TCP 和 UDP 可以使用同一个端口吗? 可以的 传输层中 TCP 和 UDP在内核中是两个完全独立的软件模块。可以根据协议字段来选择不同的模块来处理。 TCP 连接建立 TCP 三次握手过程是怎样的? 一次握手:客户端发送带有 …

PyQt5实战——UTF-8编码器功能的实现(六)

个人博客:苏三有春的博客 系类往期文章: PyQt5实战——多脚本集合包,前言与环境配置(一) PyQt5实战——多脚本集合包,UI以及工程布局(二) PyQt5实战——多脚本集合包,程序…

闯关leetcode——3222. Find the Winning Player in Coin Game

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/find-the-winning-player-in-coin-game/description/ 内容 You are given two positive integers x and y, denoting the number of coins with values 75 and 10 respectively. Alice and Bob a…

中缀表达式求值-acwing

题目: 3302. 表达式求值 - AcWing题库 解析:模拟 2*10-100024-(5*3)(3*2) 使用两种栈: 遍历:(暂时用it指向) it : 2 存入 num {2} it:* 栈空,存入 op{*} it:…

使用代理时Stable Diffusion无法正常下载各类模型的解决办法

最近发现了 Stable Diffusion 这个好玩的ai绘画工具,不得不感叹现在ai工具已经进化到这么简单易用的程度,只要下载对应的模型就可以生成各种有意思的图片 就算你没有编程基础,跟着教程也能弄出来 不过使用过程中发现部分功能无法使用 查看日…

从0开始机器学习--Day17--神经网络反向传播作业

题目:识别数字0-9,做梯度检测来验证是否在梯度下降过程中存在问题,并可视化隐藏层 代码: import numpy as np import scipy.io as sio import matplotlib.pyplot as plt from scipy.optimize import minimizedef sigmoid(z):ret…

前端学习笔记-Ajax篇

第1章:原生AJAX 1.1Ajax简介 AAX 全称为 Asynchronous JavaScript And XML,就是异步的 JS 和 XML。 通过 AAX 可以在浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据。 AAX 不是新的编程语言,而是一种将现有的标准组合在一起使用…

【Python爬虫实战】DrissionPage 与 ChromiumPage:高效网页自动化与数据抓取的双利器

🌈个人主页:易辰君-CSDN博客 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、DrissionPage简介 (一)特点 (二)安装 (三…

Halcon基于laws纹理特征的SVM分类

与基于区域特征的 SVM 分类不同,针对图像特征的 SVM 分类的算子不需要直接提取 特征,下面介绍基于 Laws 纹理特征的 SVM 分类。 纹理在计算机视觉领域的图像分割、模式识别等方面都有着重要的意义和广泛的应 用。纹理是指由于物体表面的物理属性不同所…

Netty篇(入门编程)

目录 一、Hello World 1. 目标 2. 服务器端 3. 客户端 4. 流程梳理 💡 提示 5. 运行结果截图 二、Netty执行流程 1. 流程分析 2. 代码案例 2.1. 引入依赖 2.2. 服务端 服务端 服务端处理器 2.3. 客户端 客户端 客户端处理器 2.4. 代码截图 一、Hel…

从0开始学习机器学习--Day14--如何优化神经网络的代价函数

在上一篇文章中,解析了神经网络处理分类问题的过程,类似的,在处理多元分类问题时,神经网络会按照类型分成多个输出层的神经元来表示,如下: 处理4个分类问题时的神经网络 我们可以看到,相较于之…