#10外部网页跳转vue3+SpringMVC解码GBK编码的参数

目录

1、背景

2、失败尝试之iconv-lite

2.1、安装和使用

2.2、遇到的问题

2.3、解决方案(vite-plugin-node-polyfills)

2.4、测试

3、成功尝试

3.1、前端参数读取方式

3.2、后端解码


1、背景

外部jsp页面中编码方式为GBK,跳转到vue页面时如果使用decodeURIComponent或者decodeURI均不可成功解码,因为这两个方法解码时使用的是UTF-8。

项目使用Vite进行管理。

2、失败尝试之iconv-lite

2.1、安装和使用

安装

npm install iconv-lite

使用:

import * as iconv from "iconv-lite[a1] ";const description = iconv.decode(params.description, 'gbk')

2.2、遇到的问题

2.3、解决方案(vite-plugin-node-polyfills)

npm install --save-dev vite-plugin-node-polyfills

vite.config.js中进行如下配置:

export default defineConfig({
plugins: [nodePolyfills()]
})

2.4、测试

实际上例如并不能将gbk编码的参数正确解码,同时由于Vite会自动将url中的参数使用decodeUrl进行解码,导致测试需要部署到测试环境的服务器上调试,没有办法本地调试(报错 URI malformed )。

3、成功尝试

既然只能部署到服务器上测,且前端解码失效,那不如传递到后端之后再由后端进行解码

3.1、前端参数读取方式

不要使用vueuse提供的useUrlSearchParams(),读取方式如下

export function getQueryParams() {return window.location.search.replace('?', '').split('&').reduce((r, e) =>(r[e.split('=')[0]] = e.split('=')[1] , r), {})
}

3.2、后端解码

传递的参数类型包括String和String[]

public static <T> void decodeGbk(T bean) {Class<?> type = bean.getClass();BeanInfo beanInfo;try {beanInfo = Introspector.getBeanInfo(type);} catch (IntrospectionException e) {log.error("对象转换Map异常{}", e.getMessage());return;}PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();for (PropertyDescriptor descriptor : propertyDescriptors) {String propertyName = descriptor.getName();if (!"class".equals(propertyName)) {Method readMethod = descriptor.getReadMethod();try {Object result = readMethod.invoke(bean);if (!ObjectUtils.isEmpty(result)) {//将gbk编码的字符使用UrlDecoder解码if (result instanceof String) {String s = (String) result;String s1 = URLDecoder.decode(s, "GBK");Method writeMethod = descriptor.getWriteMethod();writeMethod.invoke(bean, s1);} else if (result instanceof String[]) {String[] strings = (String[]) result;for (int i = 0; i < strings.length; i++) {String s = strings[i];String s1 = URLDecoder.decode(s, "GBK");strings[i] = s1;}Method writeMethod = descriptor.getWriteMethod();writeMethod.invoke(bean, (Object) strings);}}} catch (Exception e) {log.error("对象转换Map异常{},异常属性[{}]", e.getMessage(), propertyName);}}}

如果对你有帮助,点赞、收藏、关注是我更新的动力!

往期精彩:

#9vue3中动态组件使用el-icon-CSDN博客文章浏览阅读2.1k次,点赞71次,收藏12次。vue3中动态组件使用el-iconhttps://blog.csdn.net/weixin_42718399/article/details/135851868?spm=1001.2014.3001.5502#7注解+切面AOP+枚举类记录日志-CSDN博客文章浏览阅读579次,点赞22次,收藏8次。注解+切面AOP+枚举类记录日志https://blog.csdn.net/weixin_42718399/article/details/135649201?spm=1001.2014.3001.5502#5解析filter为什么不能注入bean和解决办法以及filter、interceptor、aspect之间的执行顺序_filter 不能注入实体类-CSDN博客文章浏览阅读1.1k次,点赞38次,收藏7次。filter过滤器为什么不能注入bean以及解决办法_filter 不能注入实体类https://blog.csdn.net/weixin_42718399/article/details/135517565?spm=1001.2014.3001.5502#3Jenkins(Windows环境)版本升级、迁移、负载均衡、双机器同步与备份_jenkins 版本升级-CSDN博客文章浏览阅读1k次,点赞28次,收藏17次。Jenkins(Windows环境)版本升级、迁移、负载均衡、双机器同步与备份_jenkins 版本升级https://blog.csdn.net/weixin_42718399/article/details/135404525?spm=1001.2014.3001.5502#2Vite+Vue3+SpringMVC前后端分离 解决跨域问题和session每次请求不一致问题-CSDN博客文章浏览阅读1.1k次,点赞37次,收藏15次。Vite+Vue3+SpringMVC前后端分离通过vite/nginx解决跨域问题和session一致性问题https://blog.csdn.net/weixin_42718399/article/details/135388463?spm=1001.2014.3001.5502

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#,入门教程(33)——万能的数据接送者json

上一篇&#xff1a; C#&#xff0c;入门教程(32)——程序运行时的调试技巧与逻辑错误探针技术与源代码https://blog.csdn.net/beijinghorn/article/details/126014885 作为21世纪的编程者&#xff0c;无论你是前端还是后端&#xff0c;都逃不过“json”。 一、什么是 json&…

中耳分析时,鼓室图有哪几种分型?

做中耳分析时&#xff0c;鼓室图有哪几种分型&#xff1f; 目前&#xff0c;临床上最常用的鼓室图分型法是由Jerger提出的&#xff0c;主要分为A型、As型、Ad型、B型和C型五种类型。 A型 正常成人的鼓室图峰补偿静态声导纳值为0.3&#xff5e;1.6 mmho&#xff08;Silman等报…

【Linux】环境基础开发工具的使用之gcc详解(二)

前言&#xff1a;上一篇文章中我们讲解了Linux下的vim和yum的工具的使用&#xff0c;今天我们将在上一次的基础上进一步的讲解开放工具的时候。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:Linux的深度刨析 &#x1f448; &#x1f4a…

Jmeter学习系列之五:基础线程组(Thread Group)

前言 线程组是一系列线程的集合,每一个线程代表着一个正在使用应用程序的用户。在 jmeter 中,每个线程意味着模拟一个真实用户向服务器发起请求。 在 jmeter 中,线程组组件运行用户设置线程数量、初始化方式等等配置。 例如,如果你设置线程数为 100,那么 jmeter 将创建…

【python接口自动化】- PyMySQL数据连接

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

1E,Jarvis March

四个问题&#xff1a; 一&#xff0c;Jarvis March算法借鉴了什么算法&#xff1f; 二&#xff0c;如何确定初始点 三&#xff0c;如何获取凸包的边&#xff1f; 四&#xff0c;Jarvis March算法的好处在哪里&#xff1f; 首先看第一个问题&#xff0c; 一&#xff0c;Jarvis …

vue2 el-form 两个时间框(第一个时间框是只能选择当前时间,之前的是不允许选择,第二个时间框是第一个时间的当前的时间后30天后可以选择的)

<template><div id"app"><el-form :model"form"><el-form-item label"预签时间"><el-date-picker v-model"form.t2" type"date" placeholder"选择预签时间" changepreSigning/><…

从第一性原理看大模型Agent技术

引 一个乐观主义者的悲观估计 随着大规模模型技术的兴起&#xff0c;我们正处于一个崭新的智能时代的黎明。我们有一个大胆的预测&#xff0c;未来的5到10年将可能带来一场大变局&#xff1a;99%的开发、设计和文字工作将被AI接管。这不仅仅是一个想象&#xff0c;而是对未来可…

LeetCode 热题 100 | 链表(上)

目录 1 基础知识 1.1 空指针 1.2 结构体 1.3 指针访问 1.4 三目运算符 2 160. 相交链表 3 206. 反转链表 4 234. 回文链表 菜鸟做题第三周&#xff0c;语言是 C 1 基础知识 1.1 空指针 使用 nullptr 来判断是否为空指针&#xff1a; if (headA nullptr) …

模拟钉钉官网动画

实现思路&#xff1a;利用粘性定位sticky&#xff0c;以及滚动事件实现。首先我们应该设置滚动动画开始位置和结束位置 &#xff0c;然后根据位置计算透明度或者transform&#xff0c;scale的值。 首先根据上述图线计算属性值&#xff0c;代码如下&#xff1a; function creat…

Go语言在构建HTTP代理时的优势和挑战

Go语言&#xff0c;又称Golang&#xff0c;是一种开源的、静态类型的、编译型的编程语言。它在设计时考虑到了性能、并发性和简洁性&#xff0c;因此在构建网络应用方面表现优异。特别是在构建HTTP代理时&#xff0c;Go语言展现出了一些独特的优势&#xff0c;但也存在一些挑战…

鸿蒙开发-UI-页面路由

鸿蒙开发-UI-组件 鸿蒙开发-UI-组件2 鸿蒙开发-UI-组件3 鸿蒙开发-UI-气泡/菜单 文章目录 一、基本概念 二、页面跳转 1.router基本概念 2.使用场景 3.页面跳转参数传递 三、页面返回 1.普通页面返回 2.页面返回前增加一个询问框 1.系统默认询问框 2.自定义询问框 总…