前端向后端传递特殊字符‘%’,并且后端根据特殊字符做模糊查询

在项目中遇到根据名称模糊查询的场景,

前端向后端传递特殊字符‘%’,并且后端根据特殊字符做模糊查询_第1张图片

如果传递正常字符串,springmvc正常传递接值,持久端正将解析查询,但是有时会穿一些特殊字符的参数,这里就会产生问题。

1.通过http请求拼接url时,特殊字符不会被当做参数,例如上图中,‘%’在后台action中接不到,所以需要在前端做一下处理,转码转义一下,encodeURIComponent();

unction pagination(currentPage,pageSize){
	   var name = encodeURIComponent($.trim($("#searchTitle").val()));
	   var startTime = $.trim($("#searchStartTime").val());
	   var endTime = $.trim($("#searchEndTime").val());
	   var searchType = $("#searchType").val();
	   location.href="${adminPath }/funds/queryList?pageNum="+currentPage+
"&pageSize="+pageSize+"&projectName="+name+"&startTime="+startTime+"&endTime="+endTime;
	   	}

这样后端action就可以接到特殊字符了。

2.sql做模糊查询时,通常是用like,%作为通配符,所以参数‘%’需要加/转义一下,并且用ESCAPE关键字明确转义字符

最终sql为

select * from a where  a.project_name like CONCAT('%',#{entity.projectName,jdbcType=VARCHAR},'%') ESCAPE '/'

关于LIKE以及ESCAPE的用法,参考

https://blog.csdn.net/q343509740/article/details/80602537

你可能感兴趣的:(javascript,java,mysql)