前端向后端传递特殊字符,并且后端根据特殊字符做模糊查询
目录
前端向后端传递特殊字符‘%’,并且后端根据特殊字符做模糊查询
在项目中遇到根据名称模糊查询的场景,
如果传递正常字符串,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的用法,参考