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

ops/2024/11/13 3:52:36/

目录标题

  • 背景
  • 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

java">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) ];

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

java">[Error: null pointer: parseQuery(query)]

在这里插入图片描述

MVEL脚本(正确的)

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

java">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.ppmy.cn/ops/131886.html

相关文章

数字信号处理Python示例(8)使用复数指数函数生成正弦函数和余弦函数

文章目录 前言一、相量叠加原理二、使用旋转相量生成余弦和正弦波的Python代码三、仿真结果及分析写在后面的话 前言 首先给出使用复数指数函数生成正弦函数和余弦函数的数学表达式,然后给出Python仿真代码,并绘制了生成的函数图形,最后给出…

ChatGPT任务设计和微调策略的优化

目录 ChatGPT任务设计和微调策略的优化 一、GPT-3的基础 二、任务设计和微调策略的优化 三、基于人类反馈的强化学习(RLHF) 举例 完全注意力机制的自回归解码器网络 一、定义与原理 二、举例说明 ChatGPT任务设计和微调策略的优化 ChatGPT确实是从GPT-3开始,通过任…

基于统计方法的语言模型

基于统计方法的语言模型 基于统计方法的语言模型主要是指利用统计学原理和方法来构建的语言模型,这类模型通过分析和学习大量语料库中的语言数据,来预测词、短语或句子出现的概率。 N-gram模型:这是最基础的统计语言模型之一,它基…

解决中文乱码问题:常见原因与解决方案

大家好,我是G探险者。 最近开发遇到了中文乱码问题,在本地环境我导入一个json文件到系统后,中文显示正常,但是我们的项目部署在华为云的容器之后,发现,同样的操作,导入的数据,最终显…

微积分复习笔记 Calculus Volume 1 - 4.7 Applied Optimization Problems

4.7 Applied Optimization Problems - Calculus Volume 1 | OpenStax

一七五、HTML 不同类型的事件及其说明和示例

HTML 事件处理程序是通过 JavaScript 来捕获和响应不同的用户操作、系统事件或浏览器事件。下面是不同类型的事件及其说明和示例。 Window 事件 1. onresize 当浏览器窗口的大小发生变化时触发。 <!DOCTYPE html> <html lang"en"> <head><m…

前端预览word、excel、ppt

看到很多人都是用微软 Office Web Viewer https://view.officeapps.live.com/op/view.aspx?src[文件链接]&#xff0c; 但是我们内网访问不到&#xff0c;不说废话了&#xff0c;上代码 1.预览word、excel&#xff08;vue-office/docx、vue-office/excel&#xff09; //预览…

边缘计算网关在生产设备数据采集中的创新应用-天拓四方

随着工业4.0和智能制造的快速发展&#xff0c;生产设备的数据采集与分析已成为提升生产效率、保证产品质量、优化加工过程的关键环节。传统的数据采集方式&#xff0c;如中心化的数据处理模式&#xff0c;在面对海量数据、实时性要求高的工业场景时&#xff0c;显得力不从心。边…