HttpServletRequestWrapper 编码问题

来源:互联网 发布:linux配置多个ip地址 编辑:程序博客网 时间:2024/06/10 00:07

当发现经过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;    }


原创粉丝点击