本文探讨前端传递JSON数据时,后台接收参数出现引号转义为"的问题。分析其因后台未正确设置Content-Type导致,常见于无法使用ajax的下载场景。提供两种解决方案:使用StringEscapeUtils.unescapeHtml()或正则替换"为引号,并附带Maven依赖及代码示例。
本文探讨前端传递JSON数据时,后台接收参数出现引号转义为"的问题。分析其因后台未正确设置Content-Type导致,常见于无法使用ajax的下载场景。提供两种解决方案:使用StringEscapeUtils.unescapeHtml()或正则替换"为引号,并附带Maven依赖及代码示例。
问题产生原因
一、产生原因
当前端以JSON格式传输数据,而后台接收时出现大量"符号,这通常是因为后台未使用@RequestBody注解按JSON格式解析参数。正确接收JSON参数需确保请求头Content-Type为application/json,使后台框架能正确处理。然而,某些场景如触发浏览器下载时,无法使用ajax(因ajax不支持触发下载机制),导致无法直接设置该请求头。
使用a标签发起下载请求,但参数携带能力有限,仅适用于单个文件的下载场景。
通过form表单拼接参数并提交请求,但这种方式无法直接发送携带JSON参数的请求。因此,通常将JSON字符串拼接到输入框中,由后台以String类型接收。这种处理方式会导致JSON中的引号被转义为",从而引发后续解析问题。
解决方案
二、解决方案
1、方案一
利用org.apache.commons.lang.StringEscapeUtils类提供的unescapeHtml()方法进行处理。
@RequestMapping("/downloads")
public ResultVO downloads(String models) {
String jsonModels = StringEscapeUtils.unescapeHtml(models);
// 然后再去转为你要的Object
return ResultVO.success();
}
pom依赖
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
2、方案二
将所有"字符替换回标准引号。
String jsonModels = models.replaceAll(""", "\"");
总结
三、结束
批量下载功能现已解决,收获颇丰。遇到问题时,需耐心分析并详细记录,不仅要解决问题,更要知其原理。
另外感谢这篇文章 https://blog.csdn.net/charset_ok/article/details/80239882
到此这篇关于js前端传json后台接收‘‘被转为"的问题解决的文章就介绍到这了,更多相关json后台接收"内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!