1 映射 Cookie

Spring MVC 通过映射可以直接在业务方法中获取 Cookie 的值。

@RequestMapping("/cookie")
public String cookie(@CookieValue(value = "JSESSIONID") String sessionId){System.out.println(sessionId);return "index";
}

2 使用 JavaBean 绑定参数

Spring MVC 会根据请求参数名和 JavaBean 属性名进行自动匹配,自动为对象填充属性值,同时支持级联(级联:对象里面包含对象)属性

// 创建实体类:User
package com.southwind.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private long id;private String name;private Address address; // 包含实体类 Address
}
// 创建实体类:Address
package com.southwind.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Address {private String value;
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><form action="hello/save" method="post">用户id:<input type="text" name="id"/><br/>用户名:<input type="text" name="name"/><br/>用户地址:<input type="text" name="address.value"><input type="submit" value="注册"></form>
</body>
</html>
@RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(User user){System.out.println(user);return "index";
}

如果出现中文乱码情况,只需在 web.xml 添加 Spring MVC 自带的过滤器即可。

<filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param>  <!-- 指定编码格式 --><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param>
</filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern> <!-- 拦截所有请求 -->
</filter-mapping>

3 JSP 页面的转发和重定向

Spring MVC 默认是以转发的形式响应。

3.1 转发

@RequestMapping("/forward")
public String forward(){return "forward:/index.jsp";// 等同于 return "index";
}

浏览器输入:http://localhost:8080/hello/forward

3.2 重定向

@RequestMapping("/redirect")
public String redirect(){return "redirect:/index.jsp";
}

浏览器输入:http://localhost:8080/hello/redirect


4 Spring MVC 数据绑定

数据绑定:在后端的业务方法中直接获取客户端 HTTP 请求中的参数,将请求参数映射到业务方法的形参中,Spring MVC 中数据绑定的工作是由 HandlerAdapter 来完成。

4.1 基本数据类型

package com.southwind.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("/data")
public class DataBindHandler {@RequestMapping("/baseType")public String baseType(int id){return id+"";}
}


package com.southwind.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
@RequestMapping("/data")
public class DataBindHandler {@RequestMapping("/baseType")@ResponseBodypublic String baseType(int id){return id+"";}
}



@ResponseBody 表示 Spring MVC 会直接将业务方法的返回值响应给客户端,如果不加 @ResponseBody 注解, Spring MVC 会将业务方法的放回值传递给 DispatcherService,再由 DispatcherServlet 调用 ViewResolver 对返回值进行解析,映射到一个 JSP 资源。

4.2 包装类

@RequestMapping("/packageType")
@ResponseBody
public String packageType(Integer id){return id+"";
}

包装类可以接收 null,当 HTTP 请求没有参数时,使用包装类定义形参的数据类型,程序不会抛出异常。

- Java 有八种基本数据类型:byte、short、int、long、float、double、boolean、char
- Java 提供8种对应的包装类:Byte、Short、Integer、Long、Float、Double、Boolean、Character

@RequestMapping("/packageType")
@ResponseBody
public String packageType(@RequestParam(value = "num",required = false,defaultValue = "0") Integer id){return id+"";
}

@RequestParam

  • value = “num”:将 HTTP 请求名为 num 的参数赋给形参 id。
  • required:设置 num 是否为必填项, true 表示必填, false 表示非必填,可省略。
  • defaultValue = “0”:如果 HTTP 请求中没有 num 参数,默认值为 0。

4.3 数组

@RestController
@RequestMapping("/data")
public class DataBindHandler {@RequestMapping("/array")public String array(String[] name){String str = Arrays.toString(name);return str;}
}
// 等同于
@Controller
@RequestMapping("/data")
public class DataBindHandler {@RequestMapping("/array")@ResponseBodypublic String array(String[] name){String str = Arrays.toString(name);return str;}
}

  • @RestController 表示该控制器会直接将业务方法的返回值响应给客户端,不进行视图解析
  • @Controller 表示该控制器的每一个业务方法的返回值都会交给视图解析器进行解析
  • 如果只需要将数据响应给客户端,而不需要进行视图解析,则需要在对应的业务方法定义处添加 @ResponseBody。

4.4 List

Spring MVC 不支持 List 类型的直接转换,需要对 List 集合进行包装。

① 集合封装类

// UserList.java
package com.southwind.entity;import lombok.Data;
import java.util.List;@Data
public class UserList {private List<User> users;
}

② JSP

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><form action="/data/List" method="post">用户1编号:<input type="text" name="users[0].id"><br/>用户1名称:<input type="text" name="users[0].name"><br/>用户2编号:<input type="text" name="users[1].id"><br/>用户2名称:<input type="text" name="users[1].name"><br/>用户3编号:<input type="text" name="users[2].id"><br/>用户3名称:<input type="text" name="users[2].name"><br/><input type="submit" value="提交"></form>
</body>
</html>

③ 业务方法

@RequestMapping("/List")
@ResponseBody
public String List(UserList userList){StringBuffer str = new StringBuffer();    // StringBuffer 节省内存,提高效率for(User user:userList.getUsers()){str.append(user);}return str.toString();
}

处理 @ResponseBody 中文乱码问题,在 springmvc.xml 中配置消息转换器。
<mvc:annotation-driven><!-- 消息转换器 --><mvc:message-converters register-defaults="true"><bean class="org.springframework.http.converter.StringHttpMessageConverter"><property name="supportedMediaTypes" value="text/html;charset=UTF-8"></property></bean></mvc:message-converters>
</mvc:annotation-driven>

4.5 Map

① 自定义封装类

package com.southwind.entity;import lombok.Data;import java.util.Map;@Data
public class UserMap {private Map<String, User> users;
}

② 业务方法

@RequestMapping("/map")
public String map(UserMap userMap){StringBuffer str = new StringBuffer();for(String key:userMap.getUsers().keySet()){    // 一个一个取出 Map 的 KeyUser user = userMap.getUsers().get(key);    // 利用 key 去取 valuestr.append(user);}return str.toString();
}

③ JSP

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><form action="/data/map" method="post">用户1编号:<input type="text" name="users['a'].id"><br/>用户1名称:<input type="text" name="users['a'].name"><br/>用户2编号:<input type="text" name="users['b'].id"><br/>用户2名称:<input type="text" name="users['b'].name"><br/>用户3编号:<input type="text" name="users['c'].id"><br/>用户3名称:<input type="text" name="users['c'].name"><br/><input type="submit" value="提交"></form>
</body>
</html>

4.6 JSON

客户端发送 JSON 格式的数据,直接通过 Spring MVC 绑定到业务方法的形参中。

处理 Spring MVC 无法加载静态资源,在 web.xml 中添加配置即可。

<servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.js</url-pattern>
</servlet-mapping>

① JSP

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><script type="text/javascript" src="js/jquery-3.6.0.js"></script><script type="text/javascript">$(function(){var user = {"id":1,"name":"张三",};$.ajax({url:"/data/json",data:JSON.stringify(user);type:"POST",contentType:"application/json;charset=UTF-8",dataType:"JSON",success:function (data){alert(data.id+"---"+data.name);}})})</script>
</head>
<body></body>
</html>

② 业务方法

@RequestMapping("/json")
@ResponseBody
public User json(@RequestBody User user){System.out.println(user);user.setId(6);user.setName("张柳");return user;
}

Spring MVC 中的 JSON 和 JavaBean 的转换需要借助于 fastjson,pom.xml 引入相关依赖。

<dependency>  <!-- fastjson工具,可以将json转成java对象 --><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.32</version>
</dependency>

springmvc.xml 添加 fastjson 配置

<mvc:annotation-driven><!-- 消息转换器 --><mvc:message-converters register-defaults="true"><!-- 配置fastjson --><bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4"></bean></mvc:message-converters>
</mvc:annotation-driven>

需要添加的jar包:
https://pan.baidu.com/s/1iu4n8is6RUkARjN4wCHw2A 提取码:s8eh

3 Spring MVC 数据绑定相关推荐

  1. Spring MVC数据绑定和表单标签的应用(附带实例)

    为了让读者进一步学习数据绑定和表单标签,本节给出了一个应用范例 springMVCDemo04.该应用中实现了 User 类属性和 JSP 页面中表单参数的绑定,同时在 JSP 页面中分别展示了 in ...

  2. Spring MVC数据绑定 ----从入门到精通篇(三) POJO数据类型的绑定和自定义数据绑定

    文章目录 1.简单的POJO类型数据的绑定的使用 2.绑定包装POJO数据类型 3.自定义数据绑定-日期数据的转换 前言: 在使用简单数据类型绑定时,可以很容易的根据具体需求来定义方法中的形参类型和个 ...

  3. Spring MVC 数据绑定 绑定POJO类型 filter过滤器

    概述 用户在传参的过程中肯定不单单是一个且同种类型的,可能同时会传入多个不同类型的参数数据,所以如果使用简单数据绑定,那是非常繁琐的. 所以针对多类型,多参数的请求.可以使用POJO类型进行数据绑定, ...

  4. Spring MVC中数据绑定流程和原理

    Spring MVC不支持表单日期字符串和日期类型之间的转换 Spring MVC数据绑定的流程(Spring MVC通过反射 机制对目标处理方法进行解析) 1.Spring MVC将ServletR ...

  5. Spring MVC验证器应用实例(超详细)

    本节使用一个应用 springMVCDemo08 讲解 Spring 验证器的编写及使用.该应用中有一个数据输入页面 addGoods.jsp,效果如图 1 所示. 有一个数据显示页面 goodsLi ...

  6. Spring MVC详解(学习总结)

    一.Sprig MVC简介 1.1介绍 1.2MVC是什么 二.Spring MVC实现原理 2.1核心组件 2.2工作流程 三.第一个Spring MVC 四.常用注解 五.参数绑定 5.1URL风 ...

  7. Spring MVC @ModelAttribute 数据绑定

    前言 示例未经验证 Spring MVC @ModelAttribute 数据绑定 通过 WebDataBinder 将 @RequestMapping 方法的参数与 request 进行数据绑定 W ...

  8. spring mvc使用@InitBinder 标签对表单数据绑定

    在SpringMVC中,bean中定义了Date,double等类型,如果没有做任何处理的话,日期以及double都无法绑定. 解决的办法就是使用spring mvc提供的@InitBinder标签 ...

  9. Spring MVC常用注解说明

    2019独角兽企业重金招聘Python工程师标准>>>     使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能. 02     之前在使用Struts2实现MV ...

最新文章

  1. matlab 坐标轴中心,matlab中怎么将坐标轴改为经纬度坐标轴
  2. java生成tif图片的缩略图,将多页tif文件转换为图像文件,并生成缩略图
  3. 智能循迹避障小车C语言程序编写思路,设计一个循迹避障一体的智能小车的资料和代码及电路图详细概述...
  4. VS 常用的一些技巧和问题集锦【不断的更新中】
  5. CF438D-The Child and Sequence【线段树】
  6. 新视窗java_《计算机组成原理实验》教学大纲 - 兰州大学信息科学与工程学院.DOC...
  7. java int 指针_如何在Java中使用指针?
  8. 洛谷 P2121 拆地毯
  9. Ubuntu18.04进入命令行模式和recovery-mode安装软件
  10. php tp框架文档,Thinkphp 框架基础之入口文件功能、定义与用法分析
  11. CS231n李飞飞计算机视觉 神经网络训练细节part1下
  12. IntelliJ IDEA Maven安装配置
  13. 常用射频接头之2.92mm
  14. KMSpico 无后门下载
  15. CF卡是什么,CF卡数据丢了还能找回吗
  16. 智能DNS - 免费智能DNS解析服务-迄今为止最好用的智能DNS
  17. 关于线性回归分析的理解
  18. 将汉字转换为拼音:pypinyin.pinyin()
  19. coursera python证书_Coursera证书|三天零基础Python编程入门
  20. 健康大讲堂—凡膳皆药 寓医于食

热门文章

  1. 小米 mysql sql审核_mysql和sql - 小米米儿小的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. VR多媒体互动系统展馆应用方案
  3. 华为mate20pro能用鸿蒙哪,华为Mate 20 Pro支持无线充电吗?反向无线充电有什么用?...
  4. 【设计模式】第4章·工厂方法模式
  5. 6G新频谱方向探索|6G会改变什么?|毫米波|太赫兹|光通信
  6. 拼多多找同款接口,拼多多相似图片,拼多多图片搜索接口
  7. macOS 12 Monterey 无管理员用户解决办法
  8. INSERT DELAYED使用总结
  9. PageOffice打开word时出现Office运行时错误,部分系统文件可能丢失或已损坏.(错误代码:0x80040154)
  10. autorecover mac的ppt_恢复Mac上ppt文件:macppt没保存怎么恢复?