0.前言
本文主要演示Spring MVC项目中的JSON数据绑定操作。
主要演示《Java EE企业级应用开发教程》(第2版)中第12.3.4小节的JSON数据绑定内容。
本文演示工具:
IDEA 2024.1 Ultimate版、maven 3.6.3、JDK 1.8
本文源代码下载地址在文章最末尾。
1.创建项目
打开IDEA,选择File—>New—>Project
如果是中文版本,是“文件—>新建—>项目”

下面创建项目过程中,我们使用Maven Archetype,类型选择:
maven-archetypr-webapp
项目名称为demo12.3.4,然后点击“创建”

等待一会,就会看到下面的界面。
如果创建失败,大概率是你的maven配置失败。可以参考下面的文章进行配置:

注意:上面项目的文件夹并没有创建完毕,没有java文件夹。
2.引入依赖
打开项目的pom.xml文件,把依赖文件导入
下面这里只有dependencies和build两个标签,不是所有的pom.xml,注意替换。
<dependencies>
<!--Spring 核心类-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!--Spring MVC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!-- servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--JSP-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<!--Jackson转换核心包依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.2</version>
</dependency>
<!--Jackson转换的数据绑定包依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.2</version>
</dependency>
<!--Jackson JSON转换注解包-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
<!--构建-->
<build>
<!--设置插件-->
<plugins>
<!--具体的插件配置-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8080</port>
<path>/demo12</path>
</configuration>
</plugin>
</plugins>
</build>
引入依赖以后,右上角刷新一下maven,将相关依赖引入。
或者点击右面的maven插件

然后点击下面这两个,刷新一下maven

3.配置前端控制器
打开web.xml文件,修改里面的内容
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<!-- 配置Spring MVC的前端控制器 -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!-- 配置初始化参数,用于读取Spring MVC的配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!-- 应用加载时创建-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
代码加上后如下图,注意,下图这个地方报红是正确的,因为还没有创建这个spring-mvc.xml文件,所以会爆红。

4.配置处理器映射信息和视图解析器(spring-mvc.xml)
如果项目没有java和resources文件,那么右击main文件夹,
选择New—>Directory文件夹
中文是”新建—>目录”

在弹出来的框中分别选择java和resources文件夹,生成这两个文件夹。

创建完毕后整个项目结构如下:

右击resources文件夹,选择(新建—>XML配置文件—>Srping配置)

如果没有上面这个选项,可以选择“新建—>文件”
文件名称为spring-mvc.xml

文件内容参考代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 配置 Spring MVC 要扫描的包 -->
<context:component-scan base-package="com.itheima.controller"/>
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<mvc:annotation-driven />
<!--配置静态资源的访问映射,此配置中的文件,将不被前端控制器拦截 -->
<mvc:resources mapping="/js/**" location="/js/" />
</beans>
注意,这个地方base-package后面的爆红是正常的,因为项目还没有创建相关的文件夹

5.创建实体类(POJO)
我们需要在java目录下创建一个路径为com.itheima.pojo的文件夹

这里的文件夹名为com.itheima.pojo

继续右击pojo文件夹,选择“新建—>Java类”

类名写Product

Product类参考代码如下:
package com.itheima.pojo;
public class Product {
private String proId; //商品id
private String proName; //商品名称
public String getProId() {return proId;}
public void setProId(String proId) {
this.proId = proId;
}
public String getProName() {
return proName;
}
public void setProName(String proName) {
this.proName = proName;
}
}
此时项目代码参考如下:

6.创建处理器(Controller层)
我们需要在java目录下创建一个路径为com.itheima.controller的包,要和上面的base-package对应,这样Spring-MVC才能扫描到。
右击java,选择“新建——>软件包”

包名写:com.itheima.controller

继续右击controller文件夹,选择“新建—>Java类”

类名为ProductController

参考代码如下:
package com.itheima.controller;
import com.itheima.pojo.Product;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.List;
@Controller
public class ProductController {
/**
* 获取单个商品信息
*/
@RequestMapping(value = "/getProduct",method = RequestMethod.POST)
public void getProduct(@RequestBody Product product) {
String proId = product.getProId();
String proName = product.getProName();
System.out.println("获取到了Id为" + proId + "名称为" + proName + "的商品");
}
/**
* 获取多个商品信息
*/
@RequestMapping(value = "/getProductList",method = RequestMethod.POST)
public void getProductList(@RequestBody List<Product> products) {
for (Product product : products) {
String proId = product.getProId();
String proName = product.getProName();
System.out.println("获取到了Id为" + proId + "名称为" +
proName + "的商品");
}
}
}
添加完代码后,项目如下,代码没有爆红,而且你刚才的spring-mvc.xml中不再爆红了。

7.添加jquery
因为项目需要js,这里需要引入js,先下载jquery 下载地址: 官网:https://jquery.com/download/ 本文使用jquery版本是3.6.0版本 其他下载地址方式(访问密码: 7381): https://url47.ctfile.com/f/64055047-8453041158-a52204?p=7381 如果使用cdn方式引入,则不需要下载jquery,如果使用本地js,则安装下面的方式配置:
右击webapp文件夹,选择“新建——>Directory” (目录)

文件夹的名字是js

把下载的jquery-3.6.0.js文件放入到这个文件夹中

8.创建视图
右击webapp文件夹,选择“新建—>JSP/JSPX页面”

这里文件的名字输入“product”
如果你上一步选择的是“文件”,那么这里的名字是“product.jsp”

product.jsp的参考代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head><title>异步提交商品</title>
<%--本地引入方式--%>
<script src="js/jquery-3.6.0.js"></script>
<%--cdn引入方式--%>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<form id="products">
<table border="1">
<tr>
<th>商品id</th>
<th>商品名称</th>
<th>提交</th>
</tr>
<tr>
<td>
<input name="proId" value="1" id="proId" type="text">
</td>
<td><input name="proName" value="三文鱼"
id="proName" type="text"></td>
<td><input type="button" value="提交单个商品"
onclick="sumbmitProduct()"></td>
</tr>
<tr>
<td><input name="proId" value="2" id="proId2"
type="text"></td>
<td><input name="proName" value="红牛"
id="proName2" type="text"></td>
<td><input type="button" value="提交多个商品"
onclick="submitProducts()"></td>
</tr>
</table>
</form>
<script type="text/javascript">
function sumbmitProduct() {
var proId = $("#proId").val();
var proName = $("#proName").val();
$.ajax({
url: "${pageContext.request.contextPath }/getProduct",
type: "post",
data: JSON.stringify({proId: proId, proName: proName}),
contentType: "application/json;charset=UTF-8",
dataType: "json",
success: function (response) {
alert(response);
}
});
}
function submitProducts() {
var pro1 = {proId: $("#proId").val(), proName: $("#proName").val()}
var pro2 = {proId: $("#proId2").val(), proName: $("#proName2").val()}
$.ajax({
url: "${pageContext.request.contextPath }/getProductList",
type: "post",
data: JSON.stringify([pro1, pro2]),
contentType: "application/json;charset=UTF-8",
dataType: "json",
success: function (response) {
alert(response);
}
});
}
</script>
</body>
</html>
9.运行效果
本项目使用tomcat插件运行

双击tomcat7:run

浏览器访问默认地址为localhost:8080/demo12/

我们访问我们的jsp文件
http://localhost:8080/demo12/product.jsp

测试效果如下:

本文源代码下载地址:(访问密码: 7381)
https://url47.ctfile.com/f/64055047-8453059892-7dde4b?p=7381