控制器的请求处理方法的签名可以将任何事物作为参数,我们可以将HttpServletRequest、HttpServletResponse、 String或者数字参数传递进来,这些参数可以对应请求中的查询参数、cookie值、HTTP请求头的值或其他一些可能的选项。
下面一些例子来说明
-
使用@RequestParam绑定请求参数值
@RequestMapping(value="/method1") public String method1( @RequestParam(value="userName",required = false) String userName, @RequestParam("pwd") String pwd){ return "methodSignature"; }
@RequestParam的参数有以下三个:
- value:参数名字,即入参的请求参数名字,如username表示请求的参数区中的名字为username的参数的值将传入;
- required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404错误码;
- defaultValue:默认值,表示如果请求中没有同名参数时的默认值,默认值可以是SpEL表达式,如“#{systemProperties['java.vm.version']}”。
使用数组或者List让@RequestParam接收多个同名参数
-
public String requestparam(@RequestParam(value="role") String roleArray)
-
public String requestparam(@RequestParam(value="role") List<String> roleList)
-
使用@CookieValue绑定请求中的Cookie值
@CookieValue的参数和@RequestParam一样-
第一种绑定String类型参数
public String test(@CookieValue(value="JSESSIONID", defaultValue="") String sessionId)
-
第二种绑定javax.servlet.http.Cookie类型参数
public String test2(@CookieValue(value="JSESSIONID", defaultValue="") Cookie sessionId)
-
第一种绑定String类型参数
-
使用@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"; }
-
同时使用HttpServletRequest、HttpServletResponse、HttpSession
- @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 中,其实 @SessionAttributes 允许指定多个属性。你可以通过字符串数组的方式指定多个属性,如 @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”})。
- @ModelAttribute的使用
我们可以在需要访问 Session 属性的 controller 上加上 @SessionAttributes,然后在 action 需要的 User 参数上加上 @ModelAttribute,并保证两者的属性名称一致。SpringMVC 就会自动将 @SessionAttributes 定义的属性注入到 ModelMap 对象,在 setup action 的参数列表时,去 ModelMap 中取到这样的对象,再添加到参数列表。只要我们不去调用 SessionStatus 的 setComplete() 方法,这个对象就会一直保留在 Session 中,从而实现 Session 信息的共享。@Controller @RequestMapping("/user") @SessionAttributes("currUser") //①将模型对象(ModelMap)中currUser属性放到Session属性列表中,以便这个属性可以跨请求访问 public class UserLoginController{ @RequestMapping(value="/login") public String toLocalPage(@ModelAttribute("currUser") User user){ user.sayHello(); return "success"; } }
在执行toLocalPage()方法前,检查出user参数使用了@ModelAttribute注解,从Session参数列表中取出currUser属性,给user参数赋值
http://www.360doc.com/content/12/1007/23/7471983_240140733.shtml
http://sishuok.com/forum/blogPost/list/6189.html
- 使模型对象(ModelMap)的特定属性具有Session范围的作用域
相关推荐
SpringMVC后台接收请求参数的几种方式源码。总结了常用的注解,介绍GET和POST请求方式下的参数传递方法。
SpringMVC请求参数接收 1 GET方法请求参数处理 2 表单参数 3 【非对象】- 非对象类型单个参数接收。 3 【对象】 - 对象类型参数接收。 4 【数组】 - 列表或者数组类型参数。 5 JSON参数 6 URL路径参数 6 文件上传 8 ...
本文详细解析了springmvc接收参数的各种情况,适合项目实践开发调试。
本demo 用来写了springmvc如何接受ajax传集合以及接收form表单传集合
慨括了spring mvc请求参数常见的几种获取方法
主要给大家介绍了关于Spring MVC请求参数与响应结果全局加密和解密的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
介绍SpringMVC如何接收请求,和接收请求的方式,以及@RequsetMapping的使用
主要介绍了SpringMVC接收复杂集合对象(参数)代码示例,举接收List、List、List<Map>>、User[]、User(bean里面包含List)几种较为复杂的集合参数,具有一定参考价值,需要的朋友可以了解下。
今天小编就为大家分享快速解决SpringMVC @RequestBody 用map接收请求参数的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
主要给大家介绍了关于spring实现根据controller中接收请求参数不同走不同service的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了详解SpringMVC——接收请求参数和页面传参,小编觉得挺不错的,现在分享给大家,也给大家做个参考。
主要给大家总结介绍了关于Spring MVC请求参数接收的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
使用Spring MVC或Spring Boot中打印或记录日志一般使用AOP记录Request请求和Response响应参数,在不使用AOP的前提下,如果在Filter中打印日志,在打印或消费请求类型为Content-Type:application/json的请求时,会...
axios发送post请求时,出现了参数后台接收不到的情况,分析了下请求,发现是请求头content-type不对,是application/json,正常应该是application/x-www-form-urlencoded。 解决方法有以下三种: 1、设置axios的...
本项目是用的spring springMVC myBatis框架,前段没用框架,只写了简单的页面效果,做增删查改 这是我系统学习所得,希望能对你有所帮助 项目部署: 1;导包,就是web-inf下lib,让后把这些选中,单击右键build ...
NULL 博文链接:https://ajita.iteye.com/blog/1396264
- 结合SpringMVC框架,实现了前端请求的接收与处理,优化了用户体验。 - 实现了统一的结果封装与异常处理机制,提高了系统的稳定性和可维护性。 - 完成了前后台功能的整合开发,确保了项目的高效运作。 文件类型...
这是我后台SpringMVC控制器接收isform参数的方法,只是简单的打出它的值: @RequestMapping(method = RequestMethod.POST) @ResponseBody public Map<String> save( @RequestParam(value = "isform", required =...
最近学习了springmvc 接收json对象的两种方式,现在整理出来,具体如下: 1、以实体类方式接收 前端 ajax 提交数据: function fAddObj() { var obj = {}; obj['objname'] = obj; obj['pid'] = 1 ; $.ajax...
springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。...springmvc 表现层:方便前后端数据的传输Spring MVC 拥有控制器,作用跟Struts类似,接收外部请求,解析参数传给服务层