当发现经过Wrapper后Spring setCharacterEncoding还乱码时,可以实现HttpServletRequestWrapper,重写public String[] getParameterValues(String name) {....}等方法,再Encoding已设了encoding.
/**
* 获取应用层的编码方式,应用层Filter需要setCharacterEncoding避免乱码问题
* 当getCharacterEncoding不为空那么就可以从RequestWrapper中获取转换编码
* 后的字符串了
* @param request
* @return
*/
public static String getCharacterEncoding(HttpServletRequest request){
String encoding = request.getCharacterEncoding();
return encoding != null ? encoding : "ISO8859-1";
}
/**
* 避免Filter乱码问题,默认ISO8859-1,如果应用层setCharacterEncoding需要取出
* setCharacterEncoding的编码方式
* @param obj
* @param encoding
* @return
*/
public static String[] encoding(String[] obj,String encoding){
if (StringUtil.isNotEmpty(obj)) {
if(!encoding.equalsIgnoreCase("ISO8859-1")){
try {
if (obj.length > 1) {
List<String> ls = Arrays.asList((String[]) obj);
String[] str = new String[ls.size()];
for (int i = 0; i < ls.size(); i++) {
str[i] = new String(ls.get(i).getBytes("ISO8859-1"),encoding);
}
return str;
} else {
return new String[] {new String(obj[0].getBytes("ISO8859-1"),encoding) };
}
} catch (UnsupportedEncodingException e) {
logger.info(e.toString());
}
}else{
return obj;
}
}
return null;
}