Controller控制器返回一个引用数据类型,会自动被添加ModelAndView对象中的map集合里吗?
答案是会的
起因是今天复习springMVC,看到讲义上写到,无论控制器返回一个String,ModelAndView还是View都会转换为ModelAndView对象,由视图解析器解析视图,然后,进行页面的跳转
我们最常用的就是返回String类型,然后被视图解析器解析进行跳转。
通过抠字眼我发现这里没有提到引用数据类型,比如我自定义一个User类,并且Controller中的映射Mapping注解下的方法返回值要求是User,那么这个返回值会自动加入ModelAndView这个对象里的map集合里吗?
于是我决定自己写个demo测试一下
首先我定义了一个User类
package com.atguigu.bean; public class User { private String name; private Integer age; @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public User(String name, Integer age) { this.name = name; this.age = age; } public User() { } }
接着我在页面上写了一个表单,并进行提交
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="/referenceTest"> <table> 姓名<input type="text" name="name"> 年龄<input type="text" name="age"> 提交<input type="submit"> </table> </form> </body> </html>
写一个控制器映射,映射中改了用户的年龄,并且设置了一个mv的视图,这样进行跳转之后可以把user进行展示,看是否能够获取到user
@Controller public class InterviewController { @RequestMapping("/referenceTest") public User referenceTest(User user){ ModelAndView mv = new ModelAndView("referenceTest"); user.setAge(0); return user; } }
最后是成功后跳转的页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>过来了铁子</h1> ${requestScope.user} </body> </html>
启动服务器,打开网页,填写表单,提交,经过测试,成功获取到User对象如图
接下来我在想为什么map里这个对象的键是user,而不是其他值,于是我在搜索的时候发现一篇博客说,引用自https://blog.csdn.net/qq_32224047/article/details/107140778
于是我更改了方法中的参数名为resu
但是在页面中我仍然使用的是user进行取值
经过测试,结果如下,和之前一样,说明的确是以返回值类型首字母小写的字符串作为键值对的键的
综上,总结:Controller控制器返回一个引用数据类型,会自动被添加ModelAndView对象中的map集合里,并且集合中的键值对的键,是以方法返回值类型的首字母小写得到的字符串来充当的