下面是我的学习笔记 这是我跟着B站的一位UP主学习的笔记,方便自己以后复习。
线上学习链接
Spring MVC笔记目录
Spring MVC一些常用的数据绑定
- 如果 想要返回的是一个数据 就用@RestController 之后不用加 @ResponseBody
- 如果 想要返回的是一个视图 就用@Controller,如果用@Controller返回的是一个数据 后面方法需要加 @ResponseBody
- @RequestBody 表示把前端的JSON数据赋值给后端的对象
- 简单类比 数据相当于把数据传给客户端,视图相当于转发一个HTML页面给客户端(可能有些不准确)
基本数据类型的绑定
- 基本数据类型的数据绑定,必须传参,不能为null
- 测试链接: http://localhost:8088/data/intType?id=1
@RequestMapping("/intType")
public String intType(int id) {
return id + "";
}
基本数据类型封装类的数据绑定
- 基本数据类型封装类的数据绑定,可以传参为null
- 测试链接:http://localhost:8088/data/InterType?num=1
- 测试链接:http://localhost:8088/data/InterType
- 测试链接:http://localhost:8088/data/InterType?id=1
@RequestMapping("/InterType")
public String InterType(@RequestParam(value = "num", required = false, defaultValue = "0") Integer id) {
return id + "";
}
- value 是把客户端 传参的名字num 赋值给 后端的id ,可以前后端名字不同
- required 是否传参 默认开启
- defaultValue 设置默认值 如果请求中不添加参数
接收数组
- 这是客户端 传入一个数组的接收
- 测试链接:http://localhost:8088/data/array?name=oldbai&name=huihui
@RequestMapping("/array")
public String array(String[] name) {
String str = Arrays.toString(name);
return str;
}
接收一个列表List
- 需要创建一个列表类 UserList.java
package com.southwind.controller.userValue;
import lombok.Data;
import java.util.List;
@Data
public class UserList {
private List<User> users;
}
- 解决中文乱码问题
pom.xml 添加配制
<!--// 解决传入的是列表 中文乱码问题-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
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>
- 写一个 addList.jsp 文件
<%--
Created by IntelliJ IDEA.
User: 老白
Date: 2020/5/5
Time: 13:25
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/data/list" method="post">
<%-- 要和 业务方法的形参里面的参数映射 例如:User类对象,需要映射的是User类对象的属性 name 和 id --%>
用户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>
- 测试链接:http://localhost:8088/addList.jsp
- 测试代码:
@RequestMapping("/list")
public String list(UserList userList) {
StringBuffer str = new StringBuffer();
for (User user : userList.getUsers()) {
str.append(user);
}
return str.toString();
}
接收一个 Map 类型的数据
- 和 List 相似
- addMap.jsp
<%--
Created by IntelliJ IDEA.
User: 老白
Date: 2020/5/5
Time: 15:49
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/data/map" method="post">
<%-- 要和 业务方法的形参里面的参数映射 例如:User类对象,需要映射的是User类对象的属性 name 和 id --%>
用户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>
- UserMap.java
package com.southwind.controller.userValue;
import lombok.Data;
import java.util.Map;
@Data
public class UserMap {
private Map<String, User> users;
}
- 测试链接:http://localhost:8088/addMap.jsp
- 测试代码:
// 如果客户端传入的是一个Map 类型的数据
@RequestMapping("/map")
public String map(UserMap userMap) {
StringBuffer str = new StringBuffer();
// Map 集合的遍历
for (String key : userMap.getUsers().keySet()) {
User user = userMap.getUsers().get(key);
str.append(user);
}
return str.toString();
}
接收一个JSON 数据类型
- 客户端发送的是JSON格式的数据,通过Spring MVC绑定到业务方法的形参中
- 引入jq文件 默认Spring MVC 拦截JQ请求
- json.jsp
<%--
Created by IntelliJ IDEA.
User: 老白
Date: 2020/5/5
Time: 15:57
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
<%-- 测试JQ是否生效--%>
// $(function () {
// alert(123)
// })
// 发送json数据
$(function () {
var user = {
"id": 1,
"name": "张三"
};
//dataType 返回的数据类型
//URL 目的地址
//type 发送的方式
//contentType 编码格式
//success 发送成功后执行的方法
//data 发送的数据
$.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>
- 需要在web.xml前置控制器设置放行JQ请求
<!-- 放行JQ请求 所有静态资源都是这样放行-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
- 在pom.xml添加依赖解析JSON fastjson文件
<!--解析JSON数据-->
<dependency>
<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">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="text/html;charset=UTF-8">
</property>
</bean>
<!--配制fastjson-->
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4"></bean>
</mvc:message-converters>
</mvc:annotation-driven>
- 测试链接:http://localhost:8088/json.jsp
- 测试代码:
@RequestMapping("/json")
public User json(@RequestBody User user) {
System.out.println(user);
user.setId(6);
user.setName("oldbai");
return user;
}
将上述代码整合
dataType.java
package com.southwind.controller;
import com.southwind.controller.userValue.User;
import com.southwind.controller.userValue.UserList;
import com.southwind.controller.userValue.UserMap;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
@RestController
@ResponseBody
@RequestMapping("/data")
public class dataType {
@RequestMapping("/intType")
public String intType(int id) {
return id + "";
}
@RequestMapping("/InterType")
public String InterType(@RequestParam(value = "num", required = false, defaultValue = "0") Integer id) {
return id + "";
}
@RequestMapping("/array")
public String array(String[] name) {
String str = Arrays.toString(name);
return str;
}
@RequestMapping("/list")
public String list(UserList userList) {
StringBuffer str = new StringBuffer();
for (User user : userList.getUsers()) {
str.append(user);
}
return str.toString();
}
@RequestMapping("/map")
public String map(UserMap userMap) {
StringBuffer str = new StringBuffer();
for (String key : userMap.getUsers().keySet()) {
User user = userMap.getUsers().get(key);
str.append(user);
}
return str.toString();
}
@RequestMapping("/json")
public User json(@RequestBody User user) {
System.out.println(user);
user.setId(6);
user.setName("oldbai");
return user;
}
}
- ctrl+alt+o:格式化import
- ctrl+alt+L:格式化代码(可能会有快捷键冲突,需要注意)
web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--防止乱码-->
<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>
<!-- 配制SpringMVC-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<!-- 拦截所有请求-->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 放行JQ请求 所有静态资源都是这样放行-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
</web-app>
- springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
<!--解决传入的参数是列表 中文乱码问题-->
<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>
<!--配制fastjson-->
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4"></bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 包扫描 自动扫描-->
<context:component-scan base-package="com.southwind"/>
<!-- 配制视图解析器 例如 返回一个 “index” 逻辑视图,然后变成物理视图 /index.jsp -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀-->
<property name="prefix" value="/"></property>
<!-- 后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
- pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>com.southwind</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>com.southwind Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<!--添加MVC配制-->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
<scope>provided</scope>
</dependency>
<!--// 解决传入的是列表 中文乱码问题-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--解析JSON数据-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.32</version>
</dependency>
</dependencies>
<build>
<finalName>com.southwind</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
- 这是有关于Spring MVC 一些常用的数据绑定的用法。