spring 处理乱码的一个非常规方法
来源:互联网 发布:linux 窗口编程工具 编辑:程序博客网 时间:2024/06/15 15:55
乱码问题,很多,造成的原因也很多,
大致原因有以下几个:
1. 项目决定用 UTF-8
2. 程序的源码要用 UTF-8(Java,HTML)
3. HTML 的 meta 里要指定用 UTF-8
4. 数据库用 UTF-8
5. 数据库和 Java 的连接用 UTF-8
6. Tomcat 的 Get 设置为用 UTF-8
我这里还有一个比较坑爹的方法,
不多说,直接上代码
package com.flat.manger.filter;import java.lang.reflect.Field;import java.lang.reflect.Modifier;import org.apache.commons.lang3.StringUtils;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.springframework.stereotype.Component;/** * @description: <br/> * @version: 1<br/> * @package com.flat.manger.filter.Utf8Aspect.java * @author YangPu * @date 2017年3月23日 下午6:16:48 */@Component@Aspectpublic class Utf8Aspect { private static final String point_cut_manger = "execution(* com.flat.manger.service.*.*(..))"; private static final String point_cut_sciener = "execution(* com.flat.sciener.service.*.*(..))"; @Before(value = point_cut_manger) public void point_cut_manger(JoinPoint joinPoint) { utf8(joinPoint); } @Before(value = point_cut_sciener) public void point_cut_sciener(JoinPoint joinPoint) { utf8(joinPoint); } public void utf8(JoinPoint point) { Object[] params = point.getArgs(); if (params != null) { for (Object param : params) { if (param != null) { try { Class<?> clazz = param.getClass(); for (; clazz != Object.class; clazz = clazz.getSuperclass()) { Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { int mod = field.getModifiers(); if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) { continue; } field.setAccessible(true); Object val = field.get(param); if (val instanceof String) { String value = (String) val; if (StringUtils.isNotEmpty(value)) { value = new String(value.getBytes("ISO8859-1"), "utf-8"); } field.set(param, value); } } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }}
核心思想:就是在进入service方法之前,用spring aop执行一段代码,这段代码,就是把service的参数,全部重新编码
为什么不把切面放到controller中呢?我试了一下,不行。大概原因:controller是spring mvc反射调用的,aop拦截不到,而service都是在controller中直接代码调用的。可以轻松拦截。
0 0
- spring 处理乱码的一个非常规方法
- 一款游戏的背包数据非常规查找处理方法
- mysql非常规的中文乱码问题
- 处理列表元素的非常规写法。
- String 的常规处理方法
- 非常规的方法安装docker-compose
- 网页间非常规方法传递值的方法
- 网页间非常规方法传递值的方法
- 网页间非常规方法传递值的方法
- spring中处理中文乱码的一个过滤器配置
- 实现沉浸式actionbar的非常规方法
- javaEE链接传值乱码的一个处理方法
- 程序设计的非常规总结
- hdu4768 非常规的二分
- json 对象常规处理方法
- 系统不认硬盘的常规处理方法
- 处理乱码的一个监听器
- String的常规方法
- codeblocks mingw安装配置问题
- 越低调的人越让人放心,车子也是一样
- 2015最新34期php培训教程[基础就业班带微信开发Discuz二次开发]
- USACO 1.3 Wormholes
- 【MNIST/Python】手写体数字训练/测试数据集(图片格式)下载及分割预处理
- spring 处理乱码的一个非常规方法
- linux学习心得
- time_wheel
- 实现自己的LinkedList
- BinarySearch 有序表的二分查找
- UVM的构造函数new的个人理解
- Bootstrap3.0入门学习系列教程
- win10 系统禁用笔记本自带键盘的有效方法
- Android Toast用法大全