commons-text包中的StringEscapeUtils实现快捷高效的JSON转义字符串的反序列化

JavaWeb源码安全审计与漏洞修复实战指南 在Web应用开发中,安全漏洞是导致数据泄露和系统被入侵的主要风险。其核心原理在于未对用户输入进行充分验证或对输出进行适当编码,使得攻击者能够注入恶意代码或执行非预期操作。从技术价值看,构建安全的代码基座是保障业务连续性和用户信任的基石,能有效降低因安全事件导致的财务与声誉损失。在JavaWeb应用场景下,常见的高危漏洞包括SQL注入和XSS跨站脚本,前者通过恶意SQL指令破坏数据库,后者通过注入脚本危害用户浏览器。针对这些风险,实施系统性的源码安全审计与加固,结合参数化查询、输出编码等工程实践,是确保历史系 阅读详情

前言

一般我们在处理简单的JSON字符串时,直接通过JSON工具类即可完成了,列如:FastJson、Jackson、Gson等,但是遇到一般的转义字符,就需要我们进行纯手工的操作了,小的JSON字符串内容还不说,如果一旦遇到较长的转义的JSON字符串就不行了,这将成为系统性能方面的一个瓶颈,如果解决这个问题呢,答案就是:“ StringEscapeUtils ” 工具类咯。

 

StringEscapeUtils实现快捷高效的JSON转义字符串的反序列化

1、一般的JSON字符串序列化与反序列化

当调用接口接收到信息后,使用的是alibaba的FastJson工具类来进行反序列化的,示例代码如下:

    @Test
    public void fastjson() {
        // 将员工对象序列化为Json字符串
        String jsonString = JSON.toJSONString(initEmployee());
        System.out.println(jsonString);
        // 将Json字符串反序列化为Java对象
        Employee employee = JSON.parseObject(jsonString, Employee.class);
        System.out.println("empName: " + employee.getName());
    }

 

或者Jackson(相对于FastJson,FastJson在支持泛型方面更好些),示例代码如下:

    @Test
    public void jackson() throws Exception {
        ObjectMapper objectMapper = new ObjectMapper();
        // 将Java对象序列化为Json字符串
        String asString = objectMapper.writeValueAsString(initEmployee());
        System.out.println(asString);
        // 将Json字符串反序列化为Java对象
        Employee employee = objectMapper.readValue(asString, Employee.class);
        System.out.println("empName: " + employee.getName());
    }

 

当然你也可以使用Google的Gson,示例代码如下:

    @Test
    public void gson() {
        Gson gson = new GsonBuilder().create();
        // 将Java对象序列化为Json字符串
        String json = gson.toJson(initEmployee());
        System.out.println(json);
        // 将Json字符串反序列化为Java对象
        Employee employee = gson.fromJson(json, Employee.class);
        System.out.println("empName: " + employee.getName());
    }

 

2、JSON转义字符串的反序列化

以上方法只能处理普通的/正确的JSON字符串,如果遇到一个转义的JSON字符串就不行了,如果在一个JSON字符串中存在很多的转义字符,那个这个将不是一个正确的JSON字符串,当然不能序列化成功了,示例内容如下:

"{\"id\":\"1001\",\"name\":\"张三\",\"password\":\"zhangsan\"}"

(当然以上只是为了证明问题的测试数据,实际数据接口数据要比这个复杂的多,而且进行了特殊的加密算法)

 

一般处理方法(纯手工操作):

通过手动剔除转义字符的方式,示例代码如下:

    @Test
    public void tData() {
        String data01 = "{\"id\":\"1001\",\"name\":\"张三\",\"password\":\"zhangsan\"}";
        System.out.println("data01:" + data01);
        // 序列化为JSON字符串
        String data02 = JSON.toJSONString(data01);
        System.out.println("data02:" + data02);
        //通过 replace 去掉斜杠
        String data03 = data02.replace("\\", "");
        System.out.println("data03:" + data03);
        //去掉首尾的引号
        String data04 = data03.substring(1, data03.length() - 1);
        System.out.println("data04:" + data04);
        Map map = JSON.parseObject(data04, Map.class);
        System.out.println(map.get("name"));
    }

得到了想要的结果如下:

但是上面这个有个问题,每一次的转换都会去遍历所有的内容,当内容长度小时无所谓,但是当长度较长时,问题就来了,会消耗大量的时间,例如,博主本人的数据量较大,没调用一次接口都会花费一到两分钟来处理结果,这个。。。

 

高级处理方法(通过StringEscapeUtils工具类实现):

通过Apache的commons-lang工具包中有很多字符串处理的工具类,StringEscapeUtils就是其中之一,不过需要注意的是StringEscapeUtils是2.3版本以上才加上的,不过博主在官网看到3.0以后又开始弃用了并将该功能搬移到了commons-text工具包中,所以需要注意导入对应的包才行呀!!!

如果使用commons-lang则添加依赖:


        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

如果使用commons-text则添加依赖:

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-text</artifactId>
			<version>1.6</version>
		</dependency>

使用StringEscapeUtils工具类进行反序列化转义字符,示例内容如下:

   @Test
    public void tData() {
        String data01 = "{\"id\":\"1001\",\"name\":\"张三\",\"password\":\"zhangsan\"}";
        System.out.println("data01:" + data01);
        // 序列化为JSON字符串
        String data02 = JSON.toJSONString(data01);
        System.out.println("data02:" + data02);
        // 通过StringEscapeUtils工具类反序列化转义字符
        String data04 = StringEscapeUtils.unescapeJava(data01);
        System.out.println("data04:" + data04);
        Map map = JSON.parseObject(data04, Map.class);
        System.out.println(map.get("name"));
    }

使用起来,结果一样,但是在处理大的较长的转义JSON字符串内容时,使用StringEscapeUtils的效果会更佳的显著咯!!!

当然StringEscapeUtils还有很多好玩而且非常实用的方法,这个就需要自己去玩了,如下图:

是不是很nice,有没有感觉已经到达了人生的巅峰!!!

 

 

 


 好了,关于 commons-text包中的StringEscapeUtils实现快捷高效的JSON转义字符串的反序列化 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。 
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。


作       者:华    仔
联系作者:who.seek.me@java98k.vip
来        源:优快云 (Chinese Software Developer Network)
原        文:https://blog.youkuaiyun.com/Hello_World_QWP/article/details/91847880
版权声明:本文为博主原创文章,请在转载时务必注明博文出处!
基于Ruoyi框架的Web安全漏洞系统性挖掘与防御实践 在Web应用开发领域,Spring Boot作为主流的Java后端框架,其安全机制与漏洞模式是开发者与安全研究人员关注的核心。框架通过注解式权限控制、ORM映射等机制实现业务逻辑,但若配置不当或编码疏漏,可能引发SQL注入、越权访问等经典漏洞。从技术价值看,深入理解框架安全机制不仅能提升应用防护能力,更是企业安全建设的基础。尤其在前后端分离架构中,权限校验一致性、数据过滤完整性等成为常见风险点。本文聚焦Ruoyi这一基于Spring Boot的流行开源管理系统,结合**代码审计**与**渗透测试**方法,详 阅读详情

相关推荐

Java项目安全左移:Fortify SCA静态代码扫描实战指南

在软件开发生命周期中,静态应用程序安全测试(SAST)是一项基础且关键的安全实践。其核心原理是通过分析源代码、字节码或二进制文件,在不运行程序的情况下,基于数据流和污点传播技术,系统性地识别潜在的安全漏洞与代码缺陷。这项技术的核心价值在于将安全防护“左移”,在开发阶段早期发现并修复问题,大幅降低线上漏洞被利用的风险与后期修复成本。它广泛应用于金融、政务、互联网等对代码安全有高要求的企业级Java项目开发场景,是实现DevSecOps、满足安全合规要求的重要支撑。本文以业界广泛采用的Fortify SCA工具

weixin_34060741的博客 351

Java转义工具类StringEscapeUtils的学习笔记

StringEscapeUtils的主要功能就是为Java,Java Script,Html,XML进行转义与反转义。

weixin_45866849的博客 1万+

一个处理字符串的工具类StringEscapeUtils

最近有用到一个字符串处理类StringEscapeUtils,来自于apache工具包common-lang中,这个类能很方便的进行html,xml,java等的转义与反转义;需要注意的是,在进行反转义的时候,若字符串没有待转的字符,那么不会对字符串进行任何处理。StringEscapeUtils中都是静态方法,方便调用;这个版本还有sql转义防注入攻击的功能,在3.0版本后好像没有了就;CSV,HTML,XML,SQL,JAVA 等类型的字符串。将html的空格符号替换为空字符的功能;

weixin_42551921的博客 1217

Apache Commons Text 库简介

该包有一组类,负责将文本转换为一些不同的字符编码模型,如 Unicode 和数字字符引用。在这个快速介绍中,我们将看到Apache Commons Text是什么,它的用途,以及使用库的一些实际示例。在这个快速教程中,我们已经看到了Apache Commons Text的全部内容及其一些常见功能的概述。使我们能够定义自己的查找表,其中每个字符都可以具有相应的值,并且可以将任何文本转换为相应的等效值。具有能够将字符串中每个单词的首字母大写,交换字符串的大小写。在这里,我们将要开始翻译的字符的索引传递给。

allway2的博客 1万+

org.apache.commons.lang.StringEscapeUtils

解决json数据中,返回的数据格式中带有反斜杠 如下所示{\"Count\":\"3\",\"ErrorString\":\"\",\"Success\":true,\"URL\":\"http:\\\/\\\/172.16.80.65:8080\\\/LoginSSO.aspx?UserCode=wubg&Type=WorkItem\",\"UserId\":

commons-text-1.9-API文档-中英对照版.zip

赠送jar包:commons-text-1.9.jar; 赠送原API文档:commons-text-1.9-javadoc.jar; 赠送源代码:commons-text-1.9-sources.jar; 赠送Maven依赖信息文件:commons-text-1.9.pom; 包含翻译后的API文档:commons-text-1.9-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.commons:commons-text:1.9; 标签:apache、commons、text、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

ClassCastException: java.lang.String cannot be cast to com.alibaba.fastjson.JSONObject 的解决办法

问题概述 关于这个问题,是与第三方公司合作,远程调用服务接口时(就相当于调用远程服务提供者)遇到的这个问题,“java.lang.ClassCastException: java.lang.String cannot be cast to com.alibaba.fastjson.JSONObject” 表示不能将JSON字符串转换为JSONObject对象。 部分异常截图如下: 具体信息如下 Caused by: java.lang.ClassCastException: ja...

u014075021的博客 4万+

DRAM刷新refresh相关知识归类-基础小知识(三)

RAM每一位数据都是通过芯片内的一个小电容充电(或低电平)存储的。但随着时间的推移,电容逐渐失去电荷。为避免丢失存储的数据,必须定期刷新以将电荷(如果存在)恢复到其原始级别。此刷新过程包括读取每个位的值,然后将其写回。在此“刷新”期间,内存被占用,无法执行加载或存储位等正常操作。知道了应该这么做,但怎么去做以及有什么办法更有效率去做,就是接下来要整理的内容。

Paul 安的博客 1万+

XSS跨站脚本攻击处理

跨站脚本攻击(XSS),是目前最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。 处理方法 将参数中的特殊字符进行转换 例如 input参数值,用户输入为: <script>alert(1);</script> 处理后为: &am...

qq_42383787的博客 584

【 史上最全】测绘、遥感RS、地信GIS国家级比赛竞赛整理

目录Esri Esri

weixin_43910227的博客 9148

关于对鱼眼相机图片进行畸变校正的两种思路

鱼眼畸变主要表现为径向畸变(Radial Distortion),图像中心正常,边缘向外拉伸。畸变模型通常基于入射角θ\thetaθ(光线与光学轴夹角)和图像半径rrr的关系。等距投影(Equidistant Projection)rdfθrd​fθ,其中rdr_drd​为畸变图像半径,fff为焦距,θ\thetaθ为入射角。等立体角投影(Equisolid Angle Projection)rd2fsin⁡θ2rd​2fsinθ/2。

qq_45670407的博客 1543

SpringBoot应用构建XSS与SQL注入双重防御体系实战

在Web应用开发中,安全防护是保障业务稳定运行的基石。其核心原理在于对用户输入进行验证、过滤与转义,防止恶意代码被解释执行。SpringSecurity作为Spring生态中的安全标准框架,不仅提供了强大的认证授权能力,其过滤器链机制更为构建集中式的Web安全防护层提供了可能。通过自定义过滤器,可以在请求进入业务逻辑前,对参数进行全局清洗,有效拦截XSS(跨站脚本攻击)和SQL注入等常见攻击。这种主动防御策略,结合数据访问层的参数化查询(如MyBatis-Plus中正确使用#{})与视图层的输出转义(如Th

weixin_34259232的博客 430

86 arduino 电机yl_(八)arduino入门:直流电机控制

一、本节介绍在本实验中,您将学习如何使用驱动芯片L293D和SunFounder Uno板控制小型直流(DC)电机的方向和速度。为了使初学者更容易,我们将让直流电机左右旋转,自动加速和减速。二、材料准备1 *小型直流电机1 * L293D1 * Arduino Uno板1 *面包板1 * USB数据线杜邦线三、原理讲解L293D这是一个非常实用的芯片,可以独立控制两台直流电机。在这个实验中,只有一...

weixin_29163857的博客 3566

Java安全编程实战:从注入防御到依赖管理的高级开发指南

在软件开发生命周期中,安全编程是构建健壮应用的核心基础。其核心原理在于通过主动设计思维,在需求、设计、编码等早期阶段识别并消除风险,而非依赖事后补救。从技术价值看,这能显著降低漏洞修复成本,提升系统整体安全性。在应用场景上,安全编程尤其适用于处理用户输入、数据输出、会话管理等关键环节。例如,针对常见的SQL注入攻击,采用预编译语句(PreparedStatement)能有效隔离数据与指令;而防范跨站脚本(XSS)则需结合输出编码与内容安全策略(CSP)进行纵深防御。本文聚焦于Java高级开发,深入探讨如何通

weixin_33858336的博客 382

SpringCloud Alibaba - Seata 实现高可用和异地容灾

这里不仅仅要实现高可用,还需要实现异地容灾. 异地容灾就是说,如果你整了好几个节点部署起来,全部放到一个机房里面,那么如果这个机房出了故障,就意味着整个集群就完了,所以对于一个大型的集群来讲,都会把这些服务异地部署.问题2:如果我们要实现异地容灾,也就说某一个机房挂了,需要快速的切换到另一个可用的机房,但是这个配置在配置文件中写死了,如果要改配置文件,还需要重启服务器,这是我们不希望看到的,怎么办?进入 seata/bin 目录,运行 seata-server.bat 文件,默认端口为 8091。

CYK_byte的博客 973

4D毫米波雷达:高度信息与微多普勒效应

4D毫米波雷达:高度信息与微多普勒效应​ ,人工智能,计算机视觉,大模型,AI,本文深入解析4D毫米波雷达的高度信息获取与微多普勒效应。4D毫米波雷达通过MIMO技术、垂直天线布局及相位差计算等获取高度信息,相较传统雷达更精准。微多普勒效应由目标微运动引发,可用于目标识别、分类和运动监测。文中结合自动驾驶、安防监控案例,分析技术挑战与未来趋势,如信号干扰、数据处理复杂,未来将向高精度、与其他传感器融合发展,展现出在多领域的巨大应用潜力。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 9万+

Apache Commons Text 指南:比 String 更强大的文本处理工具

是 Apache Commons 系列中的一部分,专门为 Java 提供强大的字符串处理功能。它可以轻松完成各种复杂的文本操作,如字符串替换、相似度计算、转义等,让你在开发中不用反复编写重复的代码。Apache Commons Text 是一个功能强大的字符串处理库,适合处理各种复杂的文本操作。无论是字符串替换、转义、相似度计算,还是生成随机字符串,它都提供了丰富的工具集,帮你减少重复代码,提升开发效率。

WenZhang的博客 2513

混响效果的编程实现:Schroeder混响模型与Moorer型混响

Schroeder混响模型是由Manfred R. Schroeder在1962年提出的,它基于一系列串联的反射器(Allpass Comb Filters)和并联的反射器(Feedback Comb Filters)构成。Schroeder混响模型是由Manfred R. Schroeder在1962年提出的,它基于一系列串联的反射器(Allpass Comb Filters)和并联的反射器(Feedback Comb Filters)构成。通过调整各个反射器和全通滤波器的参数,可以实现不同的混响效果。

2301_79326857的博客 1081

java stringescapeutils_StringEscapeUtils防止xss攻击详解

StringUtils和StringEscapeUtils这两个实用类。1、转义防止xss攻击1、转义可以分为下面的几种情况第一用户输入特殊字符的时候,在提及的时候不做任何处理保持到数据库,当用户从数据库查询对对于的数据的时候,因为数据中存在特殊字符,要让特殊字符能够正常显示不被网页执行,需要对从数据库中查询出来的数据进行转义,比如用户输入一个左尖括号(例如在数据库中存储的数据是:(123)(*&...

weixin_33918358的博客 3277

【OpenClaw从入门到精通】第34篇:医疗AI的“Agent OS”时代:基于WiseClaw构建医院专属智能体平台(2026实测版)

2026年医疗AI迈入实战落地新阶段,全球首个医疗OpenClaw平台WiseClaw正式发布,香港中文大学(深圳)医院完成业内首个私有化部署。本文基于真实医疗场景需求与公开技术资料,系统拆解医疗智能体平台的建设逻辑:从医疗Agent OS的五大核心特性切入,详解门诊病历质控、用药审查、医院运行管理三大临床场景的智能体搭建流程,提供完整的私有化部署代码、安全配置方案与实操演示。文章兼顾新手入门与进阶需求,严格遵循医疗合规要求,强调“只读不写+人工复核”原则,所有方案均经过虚拟实测验证。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 786

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

commons-text开源框架讲解

记录java 各种框架的使用手册

yz18931904的博客 887

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

org.apache.commons.text.StringEscapeUtils常用方法总结

有时候会遇到json字符串进行了两次转义的情况,这时使用 unescapeJson(String) 即可安全的将json字符串进行一次反转义,而不需要手工去操作字符串,十分方便。是 Apache Commons Text 库的一部分。你可以通过 Maven 或其他依赖管理工具添加这个库到你的项目中。如果你使用 Maven,你可以在你的。

pengcheng2013的博客 1409

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

commons-lang3的StringEscapeUtils类的常用方法总结

StringEscapeUtils 从类名能看出来,是对特定字符串转义和不转义输出的工具类,例如以下的情况,使用【类名.方法名】的方式 html,xml的标签(" & < >等) java,javascript的转义字符(tab键,双引号(")等) csv文件中项目双引号等 对转义字符概念还没有理解的小伙伴,现行baidu下,下面我们一组一组来介绍常用...

dy051107的博客 9557

StringEscapeUtils:给你的字符串穿上“防弹衣“——转义工具类深度解析

给HTML穿的防弹衣💂给XML戴的防毒面具😷给JSON配的安全头盔🪖给CSV准备的防溅罩🥽“不转义的字符串就像裸奔的代码,迟早要出事!特殊字符HTML转义XML转义(注:本文示例基于commons-text 1.9,使用时请根据实际版本调整)

十年磨一剑,java开发各种业务系统 856

Java去转义字符工具类StringEscapeUtils.unescapeJava

最近对接用友NC接口,发现通过阿里的fastjson创建的JSONObject对象转换成字符串后,再调用接口传递给NC会出现中文乱码现象,对方接收到的Json字符串中中文为????,经过测试后发现将json字符串中的转义字符去掉即可正常访问接口,但字符串的方法replaceAll并不能解决这个问题,查询后发现如下方法: 导入工具类: import org.apache.commons...

weixin_38236028的博客 1万+
上一篇: converter.HttpMessageNotReadableException: JSON parse error: default constructor not found. 的解决办法
下一篇: Validation failed for argument [0] 参数校验失败的解决办法
TechBro华仔
TechBro华仔 优质创作者: Java技术领域 优质创作者: Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄11年 5万+粉丝 430原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TechBro华仔

日拱一卒无有尽,功不唐捐终入海

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值