最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中Velocity快速對(duì)變量中的引號(hào)特殊字符進(jìn)行轉(zhuǎn)義

 更新時(shí)間:2023年07月24日 11:16:02   作者:Sword_Shi  
Velocity是一個(gè)基于Java的模板引擎,與Freemarker類似,這篇文章主要介紹了Java中Velocity如何對(duì)變量中的引號(hào)特殊字符進(jìn)行轉(zhuǎn)義,主要記錄一下在使用中碰到的要對(duì)引號(hào)特殊字符進(jìn)行轉(zhuǎn)義的問(wèn)題,需要的朋友可以參考下

簡(jiǎn)介

Velocity是一個(gè)基于Java的模板引擎,與Freemarker類似。相較于Freemarker更輕量,但帶來(lái)的問(wèn)題就是功能不如Freemarker強(qiáng)大,所以實(shí)際項(xiàng)目中可能會(huì)更傾向于用Freemarker,這里不作過(guò)多介紹了,本文主要記錄一下在使用中碰到的要對(duì)引號(hào)特殊字符進(jìn)行轉(zhuǎn)義的問(wèn)題。

問(wèn)題背景

項(xiàng)目應(yīng)用中使用了Velocity,但是其中的一個(gè)模板在執(zhí)行時(shí)會(huì)報(bào)錯(cuò),模板如下:

["${content}",${scene_id}]

當(dāng)content的值中含有特殊字符時(shí),由于本身是List格式,在將變量替換后,會(huì)因?yàn)樽兞恐械奶厥庾址麑?dǎo)致轉(zhuǎn)換JSON報(bào)錯(cuò)。比如

String content = "etsl\"hesaid.\"iathisis";

執(zhí)行后會(huì)報(bào)錯(cuò):

Exception in thread "main" com.alibaba.fastjson.JSONException: syntax error, pos 8, json : ["etsl"hesaid."iathisis",59]
    at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1436)
    at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1322)
    at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:1206)
    at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:1111)
    at com.alibaba.fastjson.JSON.parseArray(JSON.java:508)

由于Velocity功能不夠強(qiáng)大,不能像Freemarker那樣用自帶的函數(shù)對(duì)特殊字符進(jìn)行處理。

解決方法

后來(lái)經(jīng)過(guò)查找資料,了解到Velocity有拓展工具類(org.apache.velocity.tools.generic.EscapeTool),查看EscapeTool類的源碼,可以發(fā)現(xiàn)該類中包含了很多工具方法,比如針對(duì)html,js等語(yǔ)言,也有對(duì)應(yīng)的轉(zhuǎn)義方法。當(dāng)前問(wèn)題可以使用其中的org.apache.velocity.tools.generic.EscapeTool#java方法來(lái)解決。

引入依賴:

<!-- https://mvnrepository.com/artifact/org.apache.velocity.tools/velocity-tools-generic -->
		<dependency>
			<groupId>org.apache.velocity.tools</groupId>
			<artifactId>velocity-tools-generic</artifactId>
			<version>3.1</version>
		</dependency>

將template修改為: 

        // 創(chuàng)建VelocityContext對(duì)象
        VelocityContext context = new VelocityContext();
        // 向VelocityContext中添加變量
        context.put("content", content);
        context.put("scene_id", 59);
        // 添加自定義工具類
        context.put("esc", new EscapeTool());

并且在創(chuàng)建VelocityContext對(duì)象時(shí),將工具類加載進(jìn)去:

        // 創(chuàng)建VelocityContext對(duì)象
        VelocityContext context = new VelocityContext();
        // 向VelocityContext中添加變量
        context.put("content", content);
        context.put("scene_id", 59);
        // 添加自定義工具類
        context.put("esc", new EscapeTool());

問(wèn)題得到解決。

完整代碼如下:

    public static void main(String[] args) throws Exception {
        String template = "[\"$esc.java(${content})\",${scene_id}]";
        String content = "etsl\"hesaid.\"iathisis";
        System.out.println(content);
        // 初始化Velocity引擎
        Velocity.init();
        // 創(chuàng)建VelocityContext對(duì)象
        VelocityContext context = new VelocityContext();
        // 向VelocityContext中添加變量
        context.put("content", content);
        context.put("scene_id", 59);
        // 添加自定義工具類
        context.put("esc", new EscapeTool());
        // 合并模板和VelocityContext
        StringWriter writer = new StringWriter();
        Velocity.evaluate(context, writer, "Velocity Example", template);
        // 輸出結(jié)果
        String params = writer.toString();
        System.out.println(params);
        JSONArray jsonArray = JSONObject.parseArray(params);
        System.out.println(jsonArray);
    }

到此這篇關(guān)于Java中Velocity如何對(duì)變量中的引號(hào)特殊字符進(jìn)行轉(zhuǎn)義的文章就介紹到這了,更多相關(guān)Velocity特殊字符轉(zhuǎn)義內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java向上轉(zhuǎn)型與向下轉(zhuǎn)型超詳細(xì)圖解

    Java向上轉(zhuǎn)型與向下轉(zhuǎn)型超詳細(xì)圖解

    我們?cè)贘ava編程中經(jīng)常碰到類型轉(zhuǎn)換,對(duì)象類型轉(zhuǎn)換主要包括向上轉(zhuǎn)型和向下轉(zhuǎn)型,這篇文章主要介紹了Java向上轉(zhuǎn)型與向下轉(zhuǎn)型的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • Java設(shè)計(jì)模式之Prototype原型模式

    Java設(shè)計(jì)模式之Prototype原型模式

    這篇文章主要為大家詳細(xì)介紹了Java設(shè)計(jì)模式之Prototype原型模式的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 詳解Java線程堆棧

    詳解Java線程堆棧

    本篇文章主要給大家講了Java線程堆棧的詳細(xì)原理以及用法,需要的朋友跟著學(xué)習(xí)下吧。
    2017-12-12
  • shiro整合swagger的注意事項(xiàng)

    shiro整合swagger的注意事項(xiàng)

    這篇文章主要介紹了shiro整合swagger需要注意的地方,幫助大家更好的理解和學(xué)習(xí)使用shiro框架,感興趣的朋友可以了解下
    2021-05-05
  • Spring之AOP兩種代理機(jī)制對(duì)比分析(JDK和CGLib動(dòng)態(tài)代理)

    Spring之AOP兩種代理機(jī)制對(duì)比分析(JDK和CGLib動(dòng)態(tài)代理)

    這篇文章主要介紹了Spring之AOP兩種代理機(jī)制對(duì)比分析(JDK和CGLib動(dòng)態(tài)代理),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • SpringBoot整合mybatisPlus實(shí)現(xiàn)批量插入并獲取ID詳解

    SpringBoot整合mybatisPlus實(shí)現(xiàn)批量插入并獲取ID詳解

    這篇文章主要為大家詳細(xì)介紹了SpringBoot如何整合mybatisPlus實(shí)現(xiàn)批量插入并獲取ID,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • 一起來(lái)學(xué)習(xí)Java IO的轉(zhuǎn)化流

    一起來(lái)學(xué)習(xí)Java IO的轉(zhuǎn)化流

    這篇文章主要為大家詳細(xì)介紹了Java IO的轉(zhuǎn)化流,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • Java小項(xiàng)目之迷宮游戲的實(shí)現(xiàn)方法

    Java小項(xiàng)目之迷宮游戲的實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于Java小項(xiàng)目之迷宮的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 一文詳解Java線程的6種狀態(tài)與生命周期

    一文詳解Java線程的6種狀態(tài)與生命周期

    一個(gè)線程在給定的時(shí)間點(diǎn)只能處于一種狀態(tài)。線程可以有6種狀態(tài):New、Runnable、Blocked、Waiting、Timed?waiting和Terminated。本文將詳細(xì)講解這6種狀態(tài),需要的可以參考一下
    2022-05-05
  • Java實(shí)現(xiàn)登錄與注冊(cè)頁(yè)面

    Java實(shí)現(xiàn)登錄與注冊(cè)頁(yè)面

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)登錄與注冊(cè)頁(yè)面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評(píng)論

龙里县| 邛崃市| 开鲁县| 安平县| 和顺县| 庆元县| 额尔古纳市| 利津县| 兖州市| 莱芜市| 沙田区| 临澧县| 望都县| 乐清市| 汶上县| 双辽市| 东乡族自治县| 大安市| 东安县| 柳林县| 长乐市| 高台县| 林甸县| 牙克石市| 松桃| 木兰县| 克东县| 古交市| 彭阳县| 阿克苏市| 汉阴县| 朝阳县| 双江| 卓尼县| 自贡市| 昌黎县| 深泽县| 井研县| 安泽县| 红河县| 方正县|