HttpServletRequestWrapper 编码问题

yzmm
1594 阅读
1 评论

当发现经过Wrapper后Spring setCharacterEncoding还乱码时,可以实现HttpServletRequestWrapper,重写public String[] getParameterValues(String name) {....}等方法,再Encoding已设了encoding。

java
1
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;
}

评论 (1)

虾米

楼主又调皮了。。。

发表评论