假设如下情景
@RequestMapping(value = "saveData")
public String saveData(GeneralList generalList, Model model, RedirectAttributes redirectAttributes) {
if (!beanValidator(model, generalList)){
return form(generalList, model);
}
generalListService.saveData(generalList);
return "redirect:"+Global.getAdminPath()+"/demo/form?"&className="+ generalList.getClassName();
}
这里传过来的参数对象中班级名名属性值为“音乐学151”
通过debug发现 ,该方法直到最后一步重定向,属性值仍为音乐学151,但当跳转到下一个form函数时,数据接收值为“151”,丢失了其中的汉字。
一步一步跟踪可发现在接收的request中,该值被转义为类似”%85%45%151”形式的字符,然后接收url值时未将汉字字符转义回来。给出如下解决方法:
@RequestMapping(value = "saveData")
public String saveData(GeneralList generalList, Model model, RedirectAttributes redirectAttributes) throw UnsupportedEncodingException{
if (!beanValidator(model, generalList)){
return form(generalList, model);
}
generalListService.saveData(generalList);
return "redirect:"+Global.getAdminPath()+"/demo/form?"&className="+ URLEncoder.encode(generalList.getClassName(),"UTF-8");
}
java提供了一个类URLEncoder把string转化为恰当的url编码,该类不用初始化,经转化后的编码能被url对象成功识别,从而成功完成重定向操作。
本文介绍了一个关于URL中汉字被错误转义的问题,并给出了使用URLEncoder进行正确转义的解决方案。
3042

被折叠的 条评论
为什么被折叠?



