Spring-MVC之参数绑定及数据响应详解
⽬录
spring-mvc之参数绑定及数据响应
参数绑定以及灵活的数据响应也是spring-mvc的⼀⼤特⾊。
参数绑定能让开发⼈员省去封装的步骤,直接从前端页⾯获取想要的数据。如前端页⾯的参数和后端实体类的属性⼀样,则可以直接返回实体类对象。
灵活的数据响应同样将页⾯的跳转和所携带的数据进⾏封装,通过视图解析器解析后返回视图,简化了开发。可以⾃由的选择返回类型,可以是对象,可以是json类型。
参数绑定
spring-mvc在Controller类的⽅法上声明数据类型的形参,可以直接调⽤形参,如果是pojo类也可以直接封装,这都得益于独特的spring-mvc的类型转换器,他可以从请求中获取传递的参数,通过⽐对pojo类型中的属性,如果字段对应的话,则⾃动封装进pojo类对象中。
基本类型参数
从浏览器通过get请求传来的键值对的数据,可以直接根据参数类型直接进⾏接收,要注意前端传⼊的参数名和⽅法形参上的参数名要⼀致,如果不⼀致需要使⽤@RequestParam注解接收指定的数据
@ResponseBody
@RequestMapping("/test")//指定⼀个请求路径
public void test(@RequestParam("username") String name){
System.out.println(name);
}
@ResponseBody
@RequestMapping("/test")//指定⼀个请求路径
public void test(String name,int age){
System.out.println(name);
System.out.println(age);
}
POJO类型参数
当前端使⽤post请求发送对象数据,如果前端传来的数据名pojo类中的属性名相同,spring-mvc会将数据⾃动封装到pojo类的属性中,如果传⼊的有pojo对象和其他参数,要注意如果其他参数与对象中的属性名⼀样时,两个都会被赋值。
@ResponseBody
@RequestMapping("/test")//指定⼀个请求路径
public void test(User user, String name){
//        同时接受实体类和⼀个姓名
System.out.println(user);
System.out.println(name);
}
User类
package com.dyh.pojo;
public class User {
private String name;
private int 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 int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
}
发送请求
运⾏结果mvc的controller
数组类型参数
接收前端传⼊的数组,直接在⽅法参数上定义和前端传⼊的数组名⼀样即可。
@ResponseBody
@RequestMapping("/test")//指定⼀个请求路径
public void test(String[] names){
System.out.String(names));
}
前端请求
运⾏结果
集合类型参数
后端⽅法参数列表中直接⽤List接收的话,必须前端传的是json类型的数据,并且后端参数前要加@RequestBody注解,声明接收的是字符串类型。在l中要加⼊jackson依赖
<dependency>
<groupId>com.</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
后端控制器
@ResponseBody
@RequestMapping("/test")//指定⼀个请求路径
public void test(@RequestBody List users){
System.out.println(users);
}
请求体
运⾏结果
还有⼀种⽅法是封装⼀个VO类,将list集合封装进去VO类
package com.dyh.pojo;
import java.util.List;
public class VO {
private List<User> userList;
@Override
public String toString(){
return"VO{"+
"userList="+ userList +
'}';
}
public List<User>getUserList(){
return userList;
}
public void setUserList(List<User> userList){
this.userList = userList;
}
}
在postman中使⽤form表单进⾏数据提交,但是这个提交⽅式⽐较特别,在现实开发中很少这样使⽤,在此只是模拟。
后端控制器
@ResponseBody
@RequestMapping("/test")//指定⼀个请求路径
public void test(VO vo){
System.out.println(vo);
}
运⾏结果
获取servlet相关API
同时后端控制器的⽅法参数列表上不但可以直接接收前端传的数据,同时也可以获得传统的servlet的相关API,同样可以使⽤原始的⽅式接收参数或者获取域对象向⾥⾯赋值。
@ResponseBody
@RequestMapping("/test")//指定⼀个请求路径
public void test(HttpServletRequest request, HttpServletResponse response, HttpSession session){
System.out.println(request);
System.out.println(response);
System.out.println(session);
}
运⾏截图
⾃定义类型转换器
SpringMVC 默认已经提供了⼀些常⽤的类型转换器,例如客户端提交的字符串转换成int型进⾏参数设置。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。