redirect重定向的url中存在中文字符转码的解决方法

假设如下情景

@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对象成功识别,从而成功完成重定向操作。

你可能感兴趣的:(redirect重定向的url中存在中文字符转码的解决方法)