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集合里,并且集合中的键值对的键,是以方法返回值类型的首字母小写得到的字符串来充当的

 

posted @ 2020-11-21 06:59  人菜话多帅瓜皮  阅读(236)  评论(0编辑  收藏  举报