1 searchContent= URLDecoder.decode(searchContent.replaceAll("%(![0-9a-fA-F]{2})","%25"),"UTF-8"); //这里是将encode后的%和手动输入的%做区分,把手动输入的%替换成%25
2 searchContent=searchContent.replace("%","#%"); //这里#是自己设置的转义符
3 and (pubComNm like '%${searchContent}%' or personalName like '%${searchContent}%' escape '#') //这里是sql语句
AOP方式:
配置切面类
package com.seeyii.base.interceptor;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.CodeSignature;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Component;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Collections;
import java.util.List;
@Aspect
@Component
public class ParamHandler {
@Pointcut("execution( * com.seeyii.web.uncompanys.controller..*(..))")
public void pointCut() {
}
@Around("pointCut()")
public Object around(ProceedingJoinPoint joinPoin) throws UnsupportedEncodingException {
//处理模糊搜索%匹配所有问题
//参数值
Object [] values = joinPoin.getArgs();
//参数名
String[] names = ((CodeSignature) joinPoin.getSignature()).getParameterNames();
for(int i=0;i<names.length;i++){
if(names[i].equals("searchContent")){
System.out.println("AOP前"+values[i]);
values[i]= URLDecoder.decode(values[i].toString().replaceAll("%(![0-9a-fA-F]{2})","%25"),"UTF-8").replace("%","#%");
System.out.println("AOP后"+values[i]);
break;
}
}
Object obj = null;
try {
//重新设置参数值
obj = joinPoin.proceed(values);
} catch (Throwable throwable) {
throwable.printStackTrace();
}
return obj;
}
}