当前位置: 首页 > news >正文

实践出真知: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循环里面是一个单独的闭包空间,你里面使用的所有的变量都需要提前定义好,不然的话这个闭包空间里面是没有这个变量定义的,然后你的所有针对这个变量的操作就都会跑出空指针异常!

在这里插入图片描述

相关文章:

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

目录标题 背景MVEL脚本(有问题的)MVEL脚本(正确的)结论分析 背景 需要从一个URL的拼接参数中解析出id的值并输出 比如: 存在URLhttps://xxxxxxxxxx?id999999&type123&name345 然后需要输出id999999 MVEL脚本(有问题的) 入参:parseThisUrlhttp…...

Flutter运行App时出现“Running Gradle task ‘assembleDebug“问题解决

在参考了众多解决办法中最有用并且最快的方法 Gradle Distributions 在这个地方下载对应你这个文件中的gradle版本 然后将 最后一行本来不是这样的,我们把下载好的zip包保存到本地,然后用这个代替网址,最后成功运行...

基于SSM(Spring + Spring MVC + MyBatis)框架的咖啡馆管理系统

基于SSM(Spring Spring MVC MyBatis)框架的咖啡馆管理系统是一个综合性的Web应用程序,用于管理和优化咖啡馆的运营。下面我将提供一个详细的案例程序概述,包括主要的功能模块和技术栈介绍。 项目概述 功能需求 用户管理&…...

【SpringBoot】18 上传文件到数据库(Thymeleaf + MySQL)

Git仓库 https://gitee.com/Lin_DH/system 介绍 使用 Thymeleaf 写的页面&#xff0c;将&#xff08;txt、jpg、png&#xff09;格式文件上传到 MySQL 数据库中。 依赖 pom.xml <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j --><depende…...

计算机体系结构之系统吞吐量(三)

前面章节《计算机体系结构之多级缓存、缓存miss及缓存hit&#xff08;二&#xff09;》讲了关于系统多级缓存的相关内容&#xff0c;其中提及了系统吞吐量一词。在此章将对其进行讲解。 系统吞吐量是计算机体系结构的一个重要指标&#xff0c;其衡量的是系统在单位时间内处理工…...

高级 HarmonyOS主题课—— 帮助快速构建各种文本识别应用的课后习题

天地不仁&#xff0c;以万物为刍狗&#xff1b; 圣人不仁&#xff0c;以百姓为刍狗。 天地之间&#xff0c;其犹橐龠乎&#xff1f; 虚而不屈&#xff0c;动而俞出。 多闻数穷&#xff0c;不若守于中。 本文内容主要来自 <HarmonyOS主题课>帮助快速构建各种文本识别应用 …...

windows C#-异常和异常处理概述

C# 语言的异常处理功能有助于处理在程序运行期间发生的任何意外或异常情况。 异常处理功能使用 try、catch 和 finally 关键字来尝试执行可能失败的操作、在你确定合理的情况下处理故障&#xff0c;以及在事后清除资源。 公共语言运行时 (CLR)、.NET/第三方库或应用程序代码都可…...

每日一题——第一百二十四题

题目&#xff1a;进制转换 #pragma once#include<stdio.h> #include<ctype.h> #include<string.h>/// <summary> /// //将字符串表示的任意进制数转为十进制 /// </summary> /// <param name"str">字符串</param> /// &l…...

在 CentOS 7 上设置 OpenResty 开机启动

在 CentOS 7 上设置 OpenResty 开机启动&#xff0c;可以按照以下步骤进行操作&#xff1a; 创建 Systemd 服务文件&#xff1a; 首先&#xff0c;您需要为 OpenResty 创建一个 Systemd 服务文件。使用文本编辑器&#xff08;如 vi 或 nano&#xff09;创建一个新的服务文件。 …...

势不可挡 创新引领 | 生信科技SOLIDWORKS 2025新品发布会·苏州站精彩回顾

2024年11月01日&#xff0c;由生信科技举办的SOLIDWORKS 2025新产品发布会在江苏苏州圆满落幕。现场邀请到制造业的专家学者们一同感受SOLIDWORKS 2025最新功能&#xff0c;探索制造业数字化转型之路。 在苏州站活动开场&#xff0c;达索系统专业客户事业部华东区渠道经理马腾飞…...

数仓之全量表、增量表、快照表、切片表、拉链表的基本概念

文章摘自&#xff1a;数仓之全量表、增量表、快照表、切片表、拉链表-腾讯云开发者社区-腾讯云 一、全量表 记录每天所有最新状态的数据&#xff0c;有无变化都要上报&#xff0c;每次往全量表里面写数据都会覆盖之前的数据 缺点&#xff1a;不能记录数据的历史变化&#xff…...

【富集分析GSEA】如何理解富集分析以及应用

如何理解富集分析 富集分析不同的方式 富集分析 不同的方式 直接使用疾病特征进行富集分析&#xff08;不翻转上调和下调的基因&#xff09; 目的&#xff1a;如果你的目标是了解疾病状态的生物学特征和功能路径&#xff0c;那么应该直接使用疾病特征&#xff08;包含疾病状态…...

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

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

数量少的连锁店要不要用智能巡检?

无论是在新闻报道中&#xff0c;还是企业定制目标客户时&#xff0c;人们都更喜欢聚焦原本就已经站在各行业金字塔尖的那 1%&#xff0c;剩下的 99% 却常常被忽略。 比如此刻我正在搜索中小型连锁企业智能巡检相关的资讯&#xff0c;但网页展示的结果基本围绕着「中大型、1000门…...

【CSS】外边距塌陷

问题背景 在移动应用页面开发中&#xff0c;父元素和子元素外边距合并&#xff0c;导致布局效果和预期不一致。 <template><view class"container"><view class"card"><p>TEST</p></view></view> </templa…...

WPF MVVM入门系列教程(二、依赖属性)

说明&#xff1a;本文是介绍WPF中的依赖属性功能&#xff0c;如果对依赖属性已经有了解了&#xff0c;可以浏览后面的文章。 为什么要介绍依赖属性 在WPF的数据绑定中&#xff0c;密不可分的就是依赖属性。而MVVM又是跟数据绑定紧密相连的&#xff0c;所以在学习MVVM之前&…...

Springboot集成syslog+logstash收集日志到ES

Springboot集成sysloglogstash收集日志到ES 1、背景 Logstash 是一个实时数据收集引擎&#xff0c;可收集各类型数据并对其进行分析&#xff0c;过滤和归纳。按照自己条件分析过滤出符合的数据&#xff0c;导入到可视化界面。它可以实现多样化的数据源数据全量或增量传输&…...

Devops业务价值流:软件研发最佳实践

在当今快速迭代的软件开发环境中&#xff0c;DevOps业务价值流已成为推动软件研发高效与质量并重的关键实践。软件研发阶段作为产品生命周期的核心环节&#xff0c;其每一步都承载着将创意转化为现实的重要使命。在历经需求澄清的精准定位、架构设计的宏观规划以及项目初始化的…...

Matplotlib 绘图艺术:从新手到高手的全面指南

引言 在数据科学和机器学习领域&#xff0c;数据可视化是一项至关重要的技能。一个优秀的可视化图表可以直观地展示数据的内在规律&#xff0c;帮助我们更好地理解数据&#xff0c;并做出更明智的决策。而在众多的绘图库中&#xff0c;Matplotlib 是 Python 中最强大、最灵活的…...

[ shell 脚本实战篇 ] 编写恶意程序实现需求(恶意程序A监测特定目录B出现特定文件C执行恶意操作D-windows)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…...

SQLI LABS | Less-33 GET-Bypass AddSlashes()

关注这个靶场的其它相关笔记&#xff1a;SQLI LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 输入下面的链接进入靶场&#xff08;如果你的地址和我不一样&#xff0c;按照你本地的环境来&#xff09;&#xff1a; http://localhost/sqli-labs/Less-33/ "Ad…...

界面控件DevExpress WPF中文教程:Data Grid——卡片视图设置

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…...

flink 内存配置(一):设置Flink进程内存

flink 内存配置&#xff08;一&#xff09;&#xff1a;设置Flink进程内存 flink 内存配置&#xff08;二&#xff09;&#xff1a;设置TaskManager内存 flink 内存配置&#xff08;三&#xff09;&#xff1a;设置JobManager内存 flink 内存配置&#xff08;四&#xff09;…...

贪心算法习题其三【力扣】【算法学习day.20】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&am…...

速盾:高防cdn针对网站的好处有哪些?

高防CDN&#xff08;Content Delivery Network&#xff09;是一种网络分发技术&#xff0c;它能够提供可靠的网站高防护服务&#xff0c;有效地解决了网站遭受DDoS攻击、恶意流量等网络安全问题。高防CDN的应用已经变得越来越广泛&#xff0c;对于网站的好处也变得越发明显。 …...

【Java SE语法】抽象类(abstract class)和接口(interface)有什么异同?

目录 1. 抽象类与接口的基本概念 1.1 抽象类 1.2 接口 2. 抽象类与接口的异同 2.1 相同点 2.2 不同点 3. 拓展知识&#xff1a;多态与设计模式 3.1 多态 3.2 设计模式 4. 结论 在软件工程中&#xff0c;设计模式和代码结构的选择对于构建可维护、可扩展的系统至关重要…...

京准同步:GPS北斗卫星授时服务器发展趋势介绍

京准同步&#xff1a;GPS北斗卫星授时服务器发展趋势介绍 京准同步&#xff1a;GPS北斗卫星授时服务器发展趋势介绍 GPS北斗卫星授时服务器的发展趋势紧密围绕着不断提升的时间同步精度、可靠性、安全性&#xff0c;以及适应广泛应用场景的需求展开&#xff0c;以下是卫星授时…...

鸿蒙多线程开发——并发模型对比(Actor与内存共享)

1、概 述 并发是指在同一时间段内&#xff0c;能够处理多个任务的能力。为了提升应用的响应速度与帧率&#xff0c;以及防止耗时任务对主线程的干扰&#xff0c;HarmonyOS系统提供了异步并发和多线程并发两种处理策略。 异步并发&#xff1a;指异步代码在执行到一定程度后会被…...

【计算机网络】章节 知识点总结

一、计算机网络概述 1. 计算机网络向用户提供的两个最重要的功能&#xff1a;连通性、共享 2. 因特网发展的三个阶段&#xff1a; 第一阶段&#xff1a;从单个网络 ARPANET 向互联网发展的过程。1983 年 TCP/IP 协议成为 ARPANET 上的标准协议。第二阶段&#xff1a;建成三级…...

开箱即用!265种windows渗透工具合集--灵兔宝盒

【渗透工具箱】灵兔宝盒-Rabbit_Treasure_Box_V1.0.1 介绍 Rabbit_Treasure_Box_V1.0.1是一款Windows渗透工具箱&#xff0c;集成Dawn Launcher管理&#xff0c;便捷备份更新。内含脚本工具及在线安全工具&#xff0c;覆盖信息收集、漏洞利用、逆向破解、蓝队防御等多领域&am…...