您现在的位置是:首页 > 众测

spring 接收url参数码?url参数怎么取

vcbgfh8RQW 2024-04-12

一、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。不知道将来打包出来会不会有其他问题。

文章版权声明:除非注明,否则均为典胜网原创文章,转载或复制请以超链接形式并注明出处。