springboot获取请求参数的几种方式可选参数使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot获取请求参数的几种方式可选参数使用相关的知识,希望对你有一定的参考价值。
参考技术A post 请求获取body内容注意:HttpServletRequest 请求中的 body 内容仅能调用 request.getInputStream(), request.getReader()和request.getParameter("key") 方法读取一次,重复读取会报 java.io.IOException: Stream closed 异常。
1.get请求获取全部参数
2、可选参数
@RequestMapping的可选参数
使用@requesMapping标注的处理函数包括的可选参数,除了HttpServletRequest, HttpServletResponse, HttpSession这些web应用中常见的参数及之前提到过的@PathVariable外,还可以包括以下可选的参数,其中大部分参数的顺序没有特殊要求的。
当前请求所属的区域设置。
用来读取request content,相当于 request.getInputStream()或request.getReader();
用来生成reponse content,相当于response.getOutputStream()或response.getWriter()。
当前认证了的用户
Spring 对request,response,session等web元素封装后的对象HttpServletRequest/response/HttpSession等原始的web对象
用来存放domain model的map结构。
可用来读取http请求的header和 body内容,注意因为httpentity,@RequestBody,Reader这三种类型的参数都是通过inputstram来读取httpbody的数据的,而inputstream流不能反复读取,因此这三种类型的参数不能放在一起使用。而且在没有设置content-type或没有设置相应的messageconverter的情况下,都会报错。
通过spring 的databinding机制将request请求中的参数自动转换为对应的java bean实例。
对command或form objects值的校验结果。此参数必须紧跟在需校验的command或form object参数后面。因为databinding可以允许将输入参数和多个java bean 进行绑定(也就是说我们可以把输入request param转换成为多个java 对象)。
Session的状态。当使用@SessionAttributes来标注请求需要session中对应的值时,在处理结束时,使用SessionStatus. setComplete()来将session设置为时效。
将request参数和handler method参数做绑定。例如
将handler method中的参数与request header中的值绑定,例如
将handler method中的参数与request context body中的值绑定
例如
表示将request body中的内容与u这个入参绑定。
将handler method中的参数与cookie中的值绑定
例如
将handler method中的参数与对应的类型绑定,名称缺省为类名(首字母小写),如果ModelAttribute指定了值则以该值作为model attribute name。
例如
实例
1、直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交。
url形式: http://localhost/SSMDemo/demo/addUser1?username=lixiaoxi&password=111111 提交的参数需要和Controller方法中的入参名称一致。
2、通过HttpServletRequest接收,post方式和get方式都可以。
3、通过一个bean来接收,post方式和get方式都可以。
(1)建立一个和表单中参数对应的bean
(2)用这个bean来封装接收的参数
4、通过@PathVariable获取路径中的参数
例如,访问 http://localhost/SSMDemo/demo/addUser4/lixiaoxi/111111 路径时,则自动将URL中模板变量username和password绑定到通过@PathVariable注解的同名参数上,即入参后username=lixiaoxi、password=111111。
5、使用@ModelAttribute注解获取POST请求的FORM表单数据
Jsp表单如下:
Java Controller如下:
6、用注解@RequestParam绑定请求参数到方法入参
当请求参数username不存在时会有异常发生,可以通过设置属性required=false解决,例如: @RequestParam(value="username", required=false)
Spring Controller 获取请求参数的几种方法
1、直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交。若"Content-Type"="application/x-www-form-urlencoded",可用post提交
url形式:http://localhost:8080/SSMDemo/demo/addUser1?username=lixiaoxi&password=111111 提交的参数需要和Controller方法中的入参名称一致。
/** * 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"; }
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方式都可以。
/** * 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、使用@ModelAttribute注解获取POST请求的FORM表单数据
/** * 4、使用@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"; }
5、用注解@RequestParam绑定请求参数到方法入参
当请求参数username不存在时会有异常发生,可以通过设置属性required=false解决,例如: @RequestParam(value="username", required=false)
**** 若"Content-Type"="application/x-www-form-urlencoded",post get都可以
**** 若"Content-Type"="application/application/json",只适用get
/** * 5、用注解@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"; }
6、用request.getQueryString() 获取spring MVC get请求的参数,只适用get请求
@RequestMapping(value="/addUser6",method=RequestMethod.GET) public String addUser6(HttpServletRequest request) {
System.out.println("username is:"+request.getQueryString());
return "demo/index";
}
以上是关于springboot获取请求参数的几种方式可选参数使用的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot Controller接收参数的几种常用注解方式