HttpServletRequestWrapper 编码问题
当发现经过Wrapper后Spring setCharacterEncoding还乱码时,可以实现HttpServletRequestWrapper,重写public String[] getParameterValues(String name) {....}等方法,再Encoding已设了encoding。
java1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
/** * 获取应用层的编码方式,应用层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; }
楼主又调皮了。。。