Spring MVC 引用数据类型参数传递

335 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情

前言

在之前的文章中,我们介绍了Spring MVC的基本数据类型的参数绑定,可是在我们开发的过程中需要传递的参数会很多,这样在参数列表之中传递一大串的基本数据类型过于麻烦而且写起来也不好看,所以我们需要使用引用数据类型来传递参数,从而实现Spring MVC引用数据类型的参数绑定。

引用数据据类型参数绑定

对象参数传递

1.创建Student类。

package com.xyj.domain;

import lombok.Data;

@Data
public class Student {
    private String name;
    private int age;
}

我们复习下前面的内容,我们使用@Data注解就可以省的去写get,set方法。

2.在Controller包下创建StudentController控制器类。

package com.xyj.controller;

import com.xyj.domain.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/student")
public class StudentController {

    //传递对象
    @RequestMapping("/getMess")
    @ResponseBody
    public String getMess(Student student){
        System.out.println(student);
        return "{info:studentMess}";
    }
}

3.启动项目后,打开Postman接口测试工具测试。

微信截图_20221015101352.png 我们使用POST的请求方式,url中输入我们要请求的路径,输入要传递的参数和参数值。点击‘send’按钮发送请求。

注意:这里发送请求的参数名要和对象的属性名相同才能实现匹配。

微信截图_20221015102019.png 响应内容中获取到了我们返回的info信息说明发送请求成功。然后我们去查看服务器打印的信息。

打印信息:

Student(name=张三, age=11)

这样我们就实现了对象参数的传递。

嵌套对象参数传递

前面我们实现了对象参数的传递,接下来我们来实现下嵌套对象的参数传递。

1.我们先来定义一个School类。

package com.xyj.domain;

import lombok.Data;

@Data
public class School {
    private String address;
    private String name;
}

有地址和名字两个属性。

2.在Student中定义school。

private School school;

3.Controller中刚才的getMess的方法把不用改,直接使用Postman测试。

前面student的参数还是一样的传参,那么school参数该怎么传递呢?

微信截图_20221015104234.png 很简单,我们直接school.属性名就可以了,是不是非常的方便。

请求成功之后我们去看下服务器打印的信息。

打印信息:

Student(name=张三, age=11, school=School(address=北京路8号, name=实验小学))

成功获取到了传递的参数,这样就实现了嵌套对象的参数传递。

数组参数传递

在项目中前端页面可能会有复选框,这时候就需要用到数组来传递参数

1.定义getCourse方法用于获取课程数组参数。

//传递数组
@RequestMapping("/getCourses")
@ResponseBody
public String getCourse(String[] courses){
    System.out.println(Arrays.toString(courses));
    return "{info:studentCourses}";
}

我们使用toString方法将数组以字符串的方式输出。

2.启动项目后,使用Postman发送请求。

这时候我们参数就要写和数组名相同的参数,可以写多个。

微信截图_20221015112820.png

请求成功后我们查看打印信息。

打印信息:

[语文, 数学, 英语]

这样我们就实现了数组参数的传递。

集合参数传递

对象和数组参数都能传,那么集合参数当然也可以。

1.定义getList方法用于获取集合参数。

//传递集合
@RequestMapping("/getList")
@ResponseBody
public String getList(List<String> courses){
    System.out.println(courses);
    return "{info:studentList}";
}

2.启动项目后,使用Postman发送请求。

微信截图_20221015113911.png 填写完路径和参数后我们就发送请求。

微信截图_20221015114030.png 这时候我们的请求失败了,返回了我们报错信息。这是为什么呢?前面的对象,数组明明都可以为什么这里就报错了呢?

这是因为Spring MVC将集合当成了对象来处理,对象中又没有属性,所以就报错了。那么我们怎么解决这个问题呢?

很简单,我们之前学过的知识,用@RequestParam注解就可以轻松解决。

//传递集合
@RequestMapping("/getList")
@ResponseBody
public String getList(@RequestParam List<String> courses){
    System.out.println(courses);
    return "{info:studentList}";
}

我们在集合前面加上@RequestParam注解即可。

修改完代码之后我们重新启动项目再发送请求。

微信截图_20221015114856.png 这时候我们就能成功发送请求了。

打印信息:

[美术, 体育, 音乐]

成功获取到集合参数。

HashMap参数传递

1.定义getMapping方法用于获取HashMap参数。

@RequestMapping("/getMapping")
@ResponseBody
public String getMapping(@RequestParam HashMap<Integer,String> mapping){
    System.out.println(mapping);
    return "{info:studentMapping}";
}

跟上面的集合参数传递非常相似,也是需要在前面加上@RequestParam注解。

2.启动项目,然后Postman测试。

微信截图_20221015134447.png 打印信息:

{1=美术, 2=体育, 3=音乐}

总结

有关于Spring MVC引用数据类型的参数传递我们就介绍到这里,下一篇文章我我将为大家介绍json类型的参数传递。希望大家多多支持。