1、编码问题,安卓传过来的数据乱码。
项目中有多个过滤器,需要把encode过滤器放在web.xml最前边,可以解决
2、与安卓交互时,获取session为空,因为浏览器是自动添加cookie 的,安卓在请求接口时需要自己添加,
3、在安卓上传文件 接口,过滤器拿不到参数:解决方法
这是因为过滤器不属于spring容器,需要把 springmvc 中的文件上传配置 放在 application。xml中,在容器启动的时候注册,然后在过滤器中拿到spring的上下文,判断请求头是否是上传请求,进行一次转换。具体代码如下:
1、注意放在application.xml中。。。
<bean id="springContextUtil" class="cn.lonwin.common.util.SpringContextUtil"></bean><!---->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="209715200" />
<property name="maxInMemorySize" value="4096" />
</bean>
2、获取容器对象工具类
package cn.lonwin.common.util;
import java.util.Locale;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
* @Author 学良
* @Date2020/5/12 15:12
**/
public final class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext contex)
throws BeansException
{
System.out.println("--------------------contex---------"+contex);
SpringContextUtil.context = contex;
}
public static ApplicationContext getApplicationContext() {
return context;
}
public static Object getBean(String beanName) {
return context.getBean(beanName);
}
public static String getMessage(String key) {
return context.getMessage(key, null, Locale.getDefault());
}
}
3、过滤器的处理
// 用于创建MultipartHttpServletRequest
private MultipartResolver multipartResolver = null;
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
// 注入bean
multipartResolver = (MultipartResolver) SpringContextUtil.getBean("multipartResolver");
System.out.println(multipartResolver);
}
/**
* 获取 request
* @param req
* @return
*/
private ServletRequest getRequest(ServletRequest req){
String enctype = req.getContentType();
if (StringUtils.isNotEmpty(enctype) && enctype.contains("multipart/form-data"))
// 返回 MultipartHttpServletRequest 用于获取 multipart/form-data 方式提交的请求中 上传的参数
return multipartResolver.resolveMultipart((HttpServletRequest) req);
else
return req;
}
剩下的就是处理自己的逻辑业务,这样就可以在过滤器中获取上传表单的参数了。