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;
}
剩下的就是處理自己的邏輯業務,這樣就可以在過濾器中獲取上傳表單的參數了。