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

    技术2023-06-07  92

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

    如果传递正常字符串,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

    Processed: 0.011, SQL: 9