spring 接收url参数码?url参数怎么取
一、spring***mvc***url参数怎么取
springmvc请求参数获取的几种方法
1、直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交。
/**
* 1.直接把表单的参数写在Controller相应的方法的形参中
*@param username
*@param password
*@return
*/
@RequestMapping("/addUser1")
public String addUser1(String username,String password){
System.out.println("username is:"+username);
System.out.println("password is:"+password);
return"demo/index";
}
url形式:/SSMDemo/demo/addUser1?username=lixiaoxi&password=111111提交的参数需要和Controller方法中的入参名称一致。
2、通过HttpServletRequest接收,post方式和get方式都可以。
/**
* 2、通过HttpServletRequest接收
*@param request
*@return
*/
@RequestMapping("/addUser2")
public String addUser2(HttpServletRequest request){
String username=request.getParameter("username");
String password=request.getParameter("password");
System.out.println("username is:"+username);
System.out.println("password is:"+password);
return"demo/index";
}
3、通过一个bean来接收,post方式和get方式都可以。
(1)建立一个和表单中参数对应的bean
package demo.model;
public class UserModel{
private String username;
private String password;
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username= username;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password= password;
}
}
(2)用这个bean来封装接收的参数
/**
* 3、通过一个bean来接收
*@param user
*@return
*/
@RequestMapping("/addUser3")
public String addUser3(UserModel user){
System.out.println("username is:"+user.getUsername());
System.out.println("password is:"+user.getPassword());
return"demo/index";
}
4、通过@PathVariable获取路径中的参数
/**
* 4、通过@PathVariable获取路径中的参数
*@param username
*@param password
*@return
*/
@RequestMapping(value="/addUser4/{username}/{password}",method=RequestMethod.GET)
public String addUser4(@PathVariable String username,@PathVariable String password){
System.out.println("username is:"+username);
System.out.println("password is:"+password);
return"demo/index";
}
例如,访问/SSMDemo/demo/addUser4/lixiaoxi/111111路径时,则自动将URL中模板变量{username}和{password}绑定到通过@PathVariable注解的同名参数上,即入参后username=lixiaoxi、password=111111。
5、使用@ModelAttribute注解获取POST请求的FORM表单数据
Jsp表单如下:
<form action="<%=request.getContextPath()%>/demo/addUser5" method="post">
用户名:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="提交"/>
<input type="reset" value="重置"/>
</form>
Java Controller如下:
/**
* 5、使用@ModelAttribute注解获取POST请求的FORM表单数据
*@param user
*@return
*/
@RequestMapping(value="/addUser5",method=RequestMethod.POST)
public String addUser5(@ModelAttribute("user") UserModel user){
System.out.println("username is:"+user.getUsername());
System.out.println("password is:"+user.getPassword());
return"demo/index";
}
6、用注解@RequestParam绑定请求参数到方法入参
当请求参数username不存在时会有异常发生,可以通过设置属性required=false解决,例如:@RequestParam(value="username", required=false)
/**
* 6、用注解@RequestParam绑定请求参数到方法入参
*@param username
*@param password
*@return
*/
@RequestMapping(value="/addUser6",method=RequestMethod.GET)
public String addUser6(@RequestParam("username") String username,@RequestParam("password") String password){
System.out.println("username is:"+username);
System.out.println("password is:"+password);
return"demo/index";
}
二、Vue-Resourse发送请求后台接收参数乱码问题
前台和后台乱码的问题可以说是家常便饭,一般两端定义好使用同一个字符集是不会有问题,但是昨天遇见一个小坑,分享一下。
先说环境吧,后台tomcat+spring,标准的SSM框架。tomcat配置文件和我知道能设置编码的地方都设置成UTF-8。之前使用jQuery请求正常,无乱码现象,因为最近使用vue,jQuery各种意义上的很多功能都使用不上,所以找到了vue-resourse,最强大的是这个还带有拦截器功能,嘛,可以在每次请求前后做一些操作,用处诸君可以随便想象。
然后问题来了,一切都那么美好,使用简单,功能强大,可是,可是他居然中文乱码,这就很奔溃了,网上找了大量的教程,官方文档也努力找,可是依然没找到相关问题。so,只能自食其力咯。
乱码嘛,一开始想的当然是服务器的编码,确认再三,应该是没问题的,之前jQuery请求都是正常的,那好么,观察jQuery和vue-resourse发送的请求有何不同,嘛,其实也就content-type后面多了一个charset:utf-8。很简单,我立马想到了拦截器,每次请求前给request设置个请求头,大概是这样写的。
可以,很简单。嗯,看起来应该就可以了,可是试一下发现,这个Content-Type怎么完全没变啊,然后又是一阵折腾,比如设置其他请求头都有效,可是Content-type却无效,嗯,继续看文档,发现Vue.http.options.emulateJSON=true这一句,有个emulateJSON属性,准确意思没弄懂干嘛的,反正如果设置成false后台连参数都接不到了,全都是null。
说了这么多发现好多废话,嗯,好吧。直接说最后解决办法嘛,嗯,vue-resourse嘛,毕竟比较简单,问题也很明显了,就是设置了emulateJSON属性他会自动设置Content-Type请求头,而且比他给的api调用更靠后,so,灵机一动去他的js文件里看看咯。
找到引用js的位置,我的是这样的
找到这些js文件,打开搜索application/x-www-form-urlencoded,然后手动再后面加上;charset:utf-8
嗯。暂时OK。不知道将来打包出来会不会有其他问题。
推荐阅读