pring boot 中controller如何接收http请求的参数?

作者&投稿:宋茜 (若有异议请与网页底部的电邮联系)
springmvc怎么接收javahttp请求过来的参数~

第一种 前台过来的参数名为 username
后台方法形参(string username)自动接收

第二种 方法体中 string username =request.getparamter("username")

第三种 实体绑定 形参(User user) User实体中要有username属性

下面一些例子来说明

使用@RequestParam绑定请求参数值


@RequestMapping(value="/method1") public String method1( @RequestParam(value="userName",required = false) String userName, @RequestParam("pwd") String pwd){ return "methodSignature"; }

@RequestParam的参数有以下三个:

使用数组或者List让@RequestParam接收多个同名参数



public String requestparam(@RequestParam(value="role") String roleArray)
public String requestparam(@RequestParam(value="role") List roleList)

value:参数名字,即入参的请求参数名字,如username表示请求的参数区中的名字为username的参数的值将传入;
required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404错误码;
defaultValue:默认值,表示如果请求中没有同名参数时的默认值,默认值可以是SpEL表达式,如“#{systemProperties[‘java.vm.version’]}”。
使用@CookieValue绑定请求中的Cookie值
@CookieValue的参数和@RequestParam一样

第二种绑定javax.servlet.http.Cookie类型参数
public String test2(@CookieValue(value="JSESSIONID", defaultValue="") Cookie sessionId)

第一种绑定String类型参数
public String test(@CookieValue(value="JSESSIONID", defaultValue="") String sessionId)

使用@RequestHeader绑定请求报文头的属性值

@RequestMapping(value="/method3") public String method3( @RequestHeader("Accept-Encoding") String encoding, @RequestHeader("Keep-Alive") long keepAlive){ return "methodSignature"; }



使用@PathVariabl获取路径中传递参数

@RequestMapping(value="/users/{userId}/topics/{topicId}") public ModelAndView helloWorld( @PathVariable String userId, @PathVariable Long topicId) { System.out.println(id); System.out.println(str); return new ModelAndView( " /helloWorld " ); }

如请求的URL为“控制器URL/users/123/topics/456”,则自动将URL中模板变量{userId}和{topicId}绑定到通 过@PathVariable注解的同名参数上,即入参后userId=123、topicId=456。代码在 PathVariableTypeController中

使用表单对象绑定请求参数值

@RequestMapping(value="/method4") public String method4(User user){ return "methodSignature"; }



使用Servlet API对象作为入参

同时使用HttpServletRequest、HttpServletResponse、HttpSession

@RequestMapping(value="method5") public void method5( HttpServletRequest request, HttpServletResponse response, HttpSession session){ String userName = WebUtils.findParameterValue(request, "userName"); response.addCookie(new Cookie("userName",userName)); }



使用Servlet原生API接口,如WebRequest和NativeWebRequest等

@RequestMapping(value="method6") public String method6(WebRequest request){ String userName = request.getParameter("userName"); return "methodSignature"; }



使用IO对象作为入参
如java.io.InputStream/java.io.Reader 及java.io.OutputStream/java.io.Writer

@RequestMapping(value="method7") public void method7(OutputStream os) throws IOException{ Resource res = new ClassPathResource("/image.jpg");//读取类路径下的图片文件 FileCopyUtils.copy(res.getInputStream(), os); }



使用其他类型的参数
java.util.Locale/java.security.Principal
也可以通过Servlet的HttpServletRequest的getLocale()及getUserPrincipal()

@RequestMapping(value="method8") public String method8(Locale locale,Principal principal){ return "methodSignature"; }



@SessionAttributes 和 @ModelAttribute的使用
在默认情况下,ModelMap中的属性作用于是request级别,也就是说,当本次请求结束后,ModelMap中的属性将销毁。如果希望在多个请求中共享ModelMap中的属性,必须将其属性转存到session中,这样ModelMap的属性才可以被跨请求访问
Spring允许我们有选择地之情ModelMap中的哪些属性需要转存到session中,以便下一个请求所对应的ModelMap的属性列表中还能访问到这些属性。这一功能是通过类定义处注解@SessionAttributes来实现的。
使模型对象(ModelMap)的特定属性具有Session范围的作用域
@Controller @RequestMapping("/user") @SessionAttributes("currUser") //①将模型对象(ModelMap)中currUser属性放到Session属性列表中,以便这个属性可以跨请求访问 public class UserLoginController{ @RequestMapping(value="/login") public String login(@RequestParam("id") int id, User user, ModelMap model){ // ②往ModelMap中存放currUser属性,该属性将被转存到Session属性列表中 model.addAttribute("currUser", user); return "success"; } }

我们在②处添加了一个ModelMap属性,其属性名为currUser,而①处通过@SessionAttributes注解将ModelMap中名为currUser的属性放置到Session中,所以我们不但可以在login()请求所对应的JSP视图页面中通过request.getAttribute(“currUser”)和session.getAttribute(“currUser”)获取user对象,还可以在下一个请求所对应的JSP视图页面中通过session.getAttribute(“currUser”)或者ModelMap.get(“currUser”)访问到这个属性。
这里我们仅将一个 ModelMap 的属性放入 Session 中,[email protected]��过字符串数组的方式指定多个属性,如 @SessionAttributes({“attr1”,”attr2”})。此外,@SessionAttributes 还可以通过属性类型指定要 session 化的 ModelMap 属性,如 @SessionAttributes(types = User.class),当然也可以指定多个类,如 @SessionAttributes(types = {User.class,Dept.class}),还可以联合使用属性名和属性类型指定:@SessionAttributes(types = {User.class,Dept.class},value={“attr1”,”attr2”})。

使用@RequestParam绑定请求参数值。具体操作如下。




浉河区17274055721: 求助,电脑开机进BLOS为什么会出现这个界面?一直开不了机 -
龚南奥硝: 这是因为系统没找到启动硬盘 .1、首先在 BIOS 里面设置启动选项,看里面能否找到硬盘,如果能找到,把硬盘改成第一启动就行.2、如果无法找到,则进入BIOS后,先进【Secure】菜单,选择【Secure Boot Control】选项,将其设定为 “Disabled”,然后按F10保存退出.重启再次进入BIOS ,然后在【BOOT】下将【LunchCSM】选项设定为【Enab led】.然后按F10保存退出重启.

浉河区17274055721: pring boot 中controller如何接收http请求的参数? -
龚南奥硝: 下面一些例子来说明使用@RequestParam绑定请求参数值@RequestMapping(value="/method1") public String method1( @RequestParam(value="userName",required = false) String userName, @RequestParam("pwd") String pwd){ return ...

浉河区17274055721: 华硕a55vbios设置错误开机黑屏 -
龚南奥硝: 可尝试在BIOS界面中点击F9键--回车键--F10键--回车键,若仍无法进入系统,请按以下操作更改BIOS设置:1.开机的时候长按F2键进入BIOS界面,通过方向键进【Secure】菜单,通过方向键选择【Secure Boot Control】选项,将其设定为 Disabled”2.通过方向键进入【Boot】菜单,通过方向键选择【Lunch CSM】选项,将其设定为“Enabled”3.点击F10保存设置,重启电脑试试.

浉河区17274055721: 在STC12系列单片机内部AD应用中怎么理解清除转换结束标志ADC - CONTR&=0XF7 -
龚南奥硝: 你确定是0XF7?上图是12C5A60S2的ADC_CONTR寄存器的格式,以及转换标志位的说明.按照这个来说,应该是ADC_CONTR=ADC_CONTR&0XEF(等价于ADC_CONTR&=0XEF),才能把标志位清0.

浉河区17274055721: 每次开机都出现这个,要等好久,请问怎么解决? -
龚南奥硝: 没事的,这是系统自检,等一段时间就好了,也可能时间较长.进入系统后,可以用下面的办法解决:1、(Win7)假如您的电脑硬盘没坏打开开始,运行输入regedit确定打开注册表依次选择“HKEY_LOCAL_MACHINE\SYSTEM\...

浉河区17274055721: java用srpingboot框架 需要安装springboot cli吗 -
龚南奥硝: 不需要的.依赖springboot相关依赖即可

浉河区17274055721: 裸机第一次怎么装系统BIOS设置 -
龚南奥硝: 你在bios里找一个类似sata contr此类的设置 将原来的ahci改成comp开头的,然后就可以安装了,这是针对sata硬盘来说的 如果你的安装盘是win7或者vista的话,根本不用设置,就可以识别sata盘了 除非你用ghost win7此类的盘来安装,一样要设置成ide兼容模式

浉河区17274055721: 有一次强制关机后.为什么每次开机都要读秒.就是背后有个括号s的那种. -- 求解 -
龚南奥硝: 那是检查硬盘,可以再注册表里改一下.打开运行输入regedit 打开HKEY_LOCAL_MACHINE-------SYSTEM--------Currentcontrolset------contr选中Session Manager然后双击右边的BootExecute去掉数字数据里的东西就可以了

浉河区17274055721: Spring boot与Spring cloud 是什么关系 -
龚南奥硝: pring boot 我理解就是把spring spring mvc spring data jpa 等等的一些常用的常用的基础框架组合起来,提供默认的配置,然后提供可插拔的设计,就是各种starter,来方便开发者使用这一系列的技术,套用官方的一句话,spring 家族发展到今天,已...

浉河区17274055721: STC单片机位地址的问题,比如在官网的AD转换例子中有这样的定义:ADC - FLAG EQU 10H?怎么是10H啊??
龚南奥硝: 你该对着ADC相关的寄存器来看才知道怎么回事,我看过资料,ADC_FLAG是寄存器ADC_CONTR中的一个标志位,ADC_CONTR中每一位的定义是: ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 即ADC_...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网