今天写了个springmvc的小练习,遇到点问题,
模拟的场景非常简单,登录到注册界面,输入信息,注册,然后提交表单,controller
接收到参数信息并封装成一个对象使用,然后根据刚才填的username
发送一个重定向请求,这样式的:
@RequestMapping(value="/register",method=RequestMethod.POST)
public String processRegistration(Spitter spitter){
return "redirect:/spitter/"+spitter.getUsername();
}
然后另一个controller接收请求,根据url中的username来查找刚才注册的信息,并返回
@RequestMapping(value="/{username}",method=RequestMethod.GET)
public String showSpitterProfile(
@PathVariable String username,Model model){
Spitter spitter=spitterRepository.findByUsername(username);
System.out.println(model);
model.addAttribute(spitter);
return "profile";
}
运行后报错。。。,找不到对应用户信息,debug看到username是乱码,
才想起来没有做post转码,于是加上了CharsetEncodingFilter并设置为utf-8,
再次启动,这次又有新问题了。。。url上居然最后不是中文,而是???乱码,我很慌,因为我不清楚为什么用了字符过滤器过滤post,
get请求反倒乱码,而且tomcat配置里URIEncoding也是有的。。。
现在也不知道为什么,但是url乱码是肯定的,于是用最笨的方法,URLEncoder和URLDecoder,别管代码丑不丑。。。反正能用
有知道为什么的吗?不妨告诉本菜啊。。。新人入行不到三个月的菜鸟程序员求指教
@RequestMapping(value="/register",method=RequestMethod.POST)
public String processRegistration(Spitter spitter){
//redirect表明这个视图是重定向而不是转发,它将重定向到基本信息页面
return "redirect:/spitter/"+URLEncoder.encode(spitter.getUsername());
}
@RequestMapping(value="/{username}",method=RequestMethod.GET)
public String showSpitterProfile(
@PathVariable String username,Model model){
username=URLDecoder.decode(username);
Spitter spitter=spitterRepository.findByUsername(username);
System.out.println(model);
model.addAttribute(spitter);
return "profile";
}