欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > SpringMVC

SpringMVC

2025/6/17 19:46:47 来源:https://blog.csdn.net/2401_85217463/article/details/143348217  浏览:    关键词:SpringMVC

一.Spring简介


1.1 三层架构

我们开发服务器端程序,一般都基于两种形式,一种C/S架构
程序,一种B/S架构程序. 使用Java语言基本上都是开发B/S架
构的程序,B/S架构又分成了三层架构。


三层架构:
表现层:WEB层,用来和客户端进行数据交互的。表现层
一般会采用MVC的设计模型
业务层:处理公司具体的业务逻辑的
持久层:用来操作数据库的

MVC全名是Model View Controller 模型视图控制器,每个部
分各司其职。
Model:数据模型,JavaBean的类,用来进行数据封装。
View:指JSP、HTML用来展示数据给用户
Controller:用来接收用户的请求,整个流程的控制器。


1.2 SpringMVC介绍

SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱
动类型的轻量级 Web 框架,属于SpringFrameWork 的后续
产品,已经融合在 Spring Web Flow 中。
SpringMVC 已经成为目前最主流的MVC框架之一,并且随着
Spring3.0 的发布,成为最优秀的 MVC 框架。它通过一套注
解,让一个简单的 Java 类成为处理请求的控制器,而无须实
现任何接口。同时它还支持 RESTful 编程风格的请求。

1.3 基于XML的入门案例

1. 导入SpringMVC相关坐标
2. 配置SpringMVC核心文件 spring-mvc.xml
3. 配置SpringMVC核心控制器DispathcerServlet
4. 创建UserController类, 添加注解, 定义方法
5. 设置返回页面
6. 客户端发起请求测试
7. 入门案例加载流程

导入SpringMVC相关坐标
就是导入到maven项目的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>com.lzw</groupId>
<artifactId>code_02</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 打包方式为:war包 -->
<packaging>war</packaging>
<!--编译和运行依赖的java版本-->
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties><dependencies>
<!--SpringMVC依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency><!--provided代表的是该包只在编译和测试的时候
用,运行的时候无效直接使用tomcat中的,就避免冲突-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency><dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency><dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency><dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies><build>
<plugins>
<!--Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port><!--访问端口号 -->
<path>/</path><!--项目访问路径-->
</configuration>
</plugin>
</plugins>
</build>
</project>

配置SpringMVC核心文件 spring-mvc.xml

核心配置文件创建到resources目录下

<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--配置包扫描-->
<context:component-scan base-package="com.lzw"/>
</beans>

配置SpringMVC核心控制器DispathcerServlet

配置到Web-inf里面有一个web.xml文件里

<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/
javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0">
<!--配置前端控制器-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.Dispatcher
Servlet</servlet-class>
<!--加载springmvc的核心配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<!--拦截所有请求-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

创建UserController类, 添加注解, 定义方法

@Controller
public class AccountController {
@RequestMapping("/hello")
public String hello(){
System.out.println("Hello...");
return "success.jsp";
}
}

设置返回页面

jsp页面

<%--
Created by IntelliJ IDEA.
User: T
Date: 2024-10-28
Time: 23:26
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>
<h2>springMVC入门案例</h2>
</body>
</html>

客户端发起请求测试

http://localhost:8080/hello

入门案例加载流程:
       1. 服务器启动,加载web.xml中DispatcherServlet
       2. 读取spring-mvc.xml中的配置,加载所有com.lzw包中
        所有标记为bean的类
       3. DispatcherServlet配置拦截所有请求 /
       4. 使用请求路径与所有加载的@RequestMapping的内容
        进行比对,执行对应的方法
       5. 根据方法的返回值在webapp目录中查找对应的页面并
        展示

1.4 基于配置类入门案例

1. 创建web工程,导入坐标
2. 编写SpringMVC配置类
3. 加载SpringMVC配置,并设置SpringMVC请求拦截的路径
4. 定义处理请求的Controller
5. 设置返回页面
6. 客户端发起请求测试

创建web工程,导入坐标

<dependencies>
<!--SpringMVC依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency><!--provided代表的是该包只在编译和测试的时候
用,运行的时候无效直接使用tomcat中的,就避免冲突-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency><dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency><dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency><dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-
databind</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies><build>
<plugins>
<!--Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port><!--访问端口号 -->
<path>/</path><!--项目访问路径-->
</configuration>
</plugin>
</plugins>
</build>

编写SpringMVC配置类,加载处理请求的Bean

配置类统一配置在Config包里面

@Configuration
@ComponentScan({"com.lzw"})
public class SpringMvcConfig {
}

加载SpringMVC配置,并设置SpringMVC请求拦截的路径

/**
*
* tomcat在启动的时候,其实默认是会加载web.xml文件,
只不过我们目前都是使用了
* 注解开发,所以web.xml文件目前都是没有任何内容的。 那
么我们就需要定义一个类去取代
* web.xml文件,让tomcat在启动的时候就加载该配置类。
*
* 注意: 如果一个类需要去取代web.xml文件,那么该类必须
要继承AbstractDispatcherServletInitializer
*
* web容器配置类
*/
public class WebConfig extends
AbstractDispatcherServletInitializer {
//加载springmvc配置类,产生springmvc容器(本质还是spring容器)
@Override
protected WebApplicationContext
createServletApplicationContext() {
//初始化WebApplicationContext对象
AnnotationConfigWebApplicationContext Context=new AnnotationConfigWebApplicationContext();
//加载指定配置类
webApplicationContext.register(SpringMvcConfig.class);
return Context;
}//配置springmvc能够处理的路径
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
//加载spring相关配置
@Override
protected WebApplicationContext
createRootApplicationContext() {
return null;
}
}

定义处理请求的Controller

@Controller
public class UserController {
@RequestMapping("/helloWorld")
public String helloWorld(){
System.out.println("helloWorld...");
return "success.jsp";
}
//不做页面跳转 返回数据本身
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("save...");
return "success.jsp";//要返回的jsp文件名
}
}

对于SpringMVC而言,Controller方法返回值默认表示要跳转
的页面,没有对应的页面就会报错。如果不想跳转页面而是响
应数据,那么就需要在方法上使用@ResponseBody注解。


设置返回页面

<%--
Created by IntelliJ IDEA.
User: T
Date: 2024-10-28
Time: 23:26
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>
<h2>springMVC入门案例</h2>
</body>
</html>

客户端发起请求测试 

http://localhost:8080/helloWorld
1.5 入门案例相关注解


1.5.1 @Controller注解

类型:类注解
位置:定义在Controller类上面
作用:表明是一个处理器类,用于处理接受请求和响应数据

@Controller
public class UserController {
}

1.5.2 @RequestMapping

类型:类注解或方法注解
位置:SpringMVC处理器类或方法的上方
作用:定义URL请求的处理方法,URL是类上与方法上的
@RequestMapping 的value值的拼接
相关属性:value(默认),请求访问路径


处理类:

@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(value = "/helloWorld")
public String helloWorld(){
System.out.println("helloWorld...");
return "success.jsp";
//如果返回的是静态资源,在return后面直接写静态
资源的文件名字
}
}

1.5.3 @ResponseBody

类型:类注解或方法注解
位置:SpringMVC处理器类或方法的上方
作用:表明响应的是数据本身而不是一个静态资源文件,
不做页面跳转(返回JSON数据)

@ResponseBod用法实例:

@Controller
@RequestMapping("/user")
public class UserController {
//不做页面跳转 返回数据本身
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("save...");
return "success.jsp";
}
}

二.请求参数的绑定

绑定机制:SpringMVC的参数绑定过程是把提交的请求参
数,作为控制器中方法的参数进行绑定的(要求:提交数据的name和参数的名称是相同的)

2.1 url地址传参

url地址传参,地址参数名与形参变量名相同,定义形参即可
接收参数

<a href="http://localhost:8080/demo01?
username=zhangsan&password=123456">点我</a>

接受参数 

@Controller
public class UserController {
@RequestMapping("/demo01")
public String demo01(String username,String
password){
System.out.println(username+"..."+password);
return "success.jsp";
}
}

2.2 form表单post请求传参

form表单post请求传参,表单参数名与形参变量名相同,定
义形参即可接收参数

<h2> form表单post请求传参</h2>
<form action="http://localhost:8080/demo02"method="post">
账户:<input type="text"name="username"/><br/>
密码:<input type="password"name="password"/><br/>
<input type="submit" value="提交"/>
</form>
@Controller
public class UserController {
@RequestMapping("/demo02")
public String demo02(String username,Stringpassword){
System.out.println(username+"..."+password);
return "success.jsp";
}
}

2.3 url路径参数

url路径参数,在url路径某一个层级中用{xxx}定义的参数,可
用@PathVariable注解接受url路径相应层级的参数。

<h2>url路径参数</h2>
<a href="http://localhost:8080/demo03/100">
点我</a>
@Controller
public class UserController {
@RequestMapping("/demo03/{id}")
public String demo03(@PathVariable("id")Integer id){
System.out.println(id);
return "success.jsp";
}
}

2.4 乱码问题


2.4.1 处理GET请求中文乱码

Tomcat8.5以后的版本已经处理了中文乱码的问题,但是IDEA
中的Tomcat插件目前只到Tomcat7,所以需要修改pom.xml
来解决GET请求中文乱码问题

<build>
<plugins>
<!--Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port><!--访问端口号 -->
<path>/</path><!--项目访问路径-->
<uriEncoding>UTF-8</uriEncoding>//在pom.xml里面添加防止Get请求中文乱码
</configuration>
</plugin>
</plugins>
</build>
<h2>解决GET请求中文乱码</h2>
<a href="http://localhost:8080/demo04?
username=张三&password=123456">点我</a>
@Controller
public class UserController {
@RequestMapping("/demo04")
public String demo04(String username,Stringpassword){
System.out.println(username+"..."+password);
return "success.jsp";
}
}

2.4.2 处理POST请求中文乱码

在Config包里面创建一个配置类先继承 AbstractDispatcherServletInitializer 这是一个抽象类  让它重写getServletFilters()方法 注意需要手动去重写

public class WebConfig extends AbstractDispatcherServletInitializer {
//加载springmvc配置类,产生springmvc容器(本质还是spring容器)
@Override
protected WebApplicationContext createServletApplicationContext() {
//初始化WebApplicationContext对象
AnnotationConfigWebApplicationContext Context=new AnnotationConfigWebApplicationContext();
//加载指定配置类
webApplicationContext.register(SpringMvcConfig.class);
return Context;
}
//配置springmvc能够处理的路径
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
//加载spring相关配置
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
//处理POST中文乱码
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
return new Filter[] {characterEncodingFilter};
}
}

2.5 url参数/form表单参数与不同名参数映射

请求参数名与形参变量名不同,使用@RequestParam绑定参
数关系

类型:形参注解
位置:SpringMVC处理器方法形参定义前面
作用:绑定请求参数与处理器方法形参间的关系
属性:required:是否为必传参数;defaultValue:参数默认值

<h2>url参数/form表单参数与不同名参数映射</h2>
<a href="http://localhost:8080/demo06?
username=张三&password=123456">点我</a>
@Controller
public class UserController {
@RequestMapping("/demo06")
public String demo06(@RequestParam(value ="username",defaultValue = "zs")
String userName,String password){System.out.println(userName+"..."+password);
return "success.jsp";
}
}

2.6 url参数/form表单数组类型参数用数组接收

数组参数:请求参数名与形参对象属性名相同且请求参数为多
个,定义数组类型形参即可接收参数

<h2>url参数/form表单数组类型参数用数组接收</h2>
<form action="http://localhost:8080/demo07"
method="post">
爱好:<input type="checkbox" name="hobby"value="eat"/>吃饭
<input type="checkbox" name="hobby"value="sleep"/>睡觉
<input type="checkbox" name="hobby"value="playGame"/>打游戏<br/>
<input type="submit" value="提交"/>
</form>
@Controller
public class UserController {
@RequestMapping("/demo07")
public String demo07(String[] hobby){
System.out.println(Arrays.toString(hobby));
return "success.jsp";
}
}

2.7 url参数/form表单数组类型参数用集合接收

集合List保存普通参数:请求参数名与形参集合对象名相同且
请求参数为多个,@RequestParam绑定参数关系

<h2>url参数/form表单数组类型参数用集合接收</h2>
<form action="http://localhost:8080/demo08"
method="post">
爱好:<input type="checkbox" name="hobby" value="eat"/>吃饭
<input type="checkbox" name="hobby" value="sleep"/>睡觉
<input type="checkbox" name="hobby" value="playGame"/>打游戏<br/>
<input type="submit" value="提交"/>
</form>
@Controller
public class UserController {
@RequestMapping("/demo08")
public String demo08(@RequestParam List<String> hobby){
System.out.println(hobby);
return "success.jsp";
}
}

2.8 URL参数/ form表单用Java对象接收        

POJO参数:请求参数名与形参对象属性名相同,定义POJO类
型形参即可接收参数

<h2>URL参数/form表单用Java对象接收</h2>
<a href="http://localhost:8080/demo09?
id=1&username=zhangsan&password=123456">点我</a>
@Controller
public class UserController {
@RequestMapping("/demo09")
public String demo09(User user){//接受到的数据封装到实体类对象
System.out.println(user);
return "success.jsp";
}
}

实体类:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
private String username;
private String password;
}
2.9 静态资源放行

编写类继承于WebMvcConfigurationSupport,重写
addResourceHandlers方法,在类上添加@Configuration注
解。
addResourceHandler映射的地址,/**表示包含子孙目录
addResourceLocations表示物理存在的地址

四个静态目录都进行了映射

//当前类需要设置为配置类,并被扫描加载
@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
@Override
protected void
addResourceHandlers(ResourceHandlerRegistryregistry) {
//当访问/pages/xxxx时候,从/pages目录下查找内容
registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
registry.addResourceHandler("/js/**").addResourceLocations("/js/");
registry.addResourceHandler("/css/**").addResourceLocations("/css/");
registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
}
}
2.10 JSON数据参数传递

添加json数据转换相关坐标

因为Springmvc 默认用
MappingJacksonHttpMessageConverter 对 json 数据进行
转换,需要添加jackson依赖。

jackson依赖。

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>

开启自动转换json数据的支持

@Configuration
@ComponentScan({"com.lzw"})
@EnableWebMvc //开启SpringMVC JSON数据进行自动类型转换
public class SpringMvcConfig {
}

@RequestBody

作用:形参注解,将请求体所包含的数据传递给请求参数

实列:传递JSON数组

<h2>JSON数据参数传递--传递JSON数组</h2>
<input type="button" value="点我" onclick="fn01()"/>
<script src="/js/axios-0.18.0.js"></script>
<script>
function fn01(){
var arrayJson=["张三","李四","王五"];
axios.post("http://localhost:8080/demo10",arrayJson).then(function(response){
console.log(response.data);
});
}
</script>
@RequestMapping("/demo10")
@ResponseBody
public String demo10(@RequestBody List<String> list){
System.out.println(list);
return "success";//将返回值,返回给请求的axios
}

实列:传递JSON对象
json数据与形参对象属性名相同,定义POJO类型形参即可接
收参数

<h2>JSON数据参数传递--传递JSON对象</h2>
<input type="button" value="点我" onclick="fn02()"/>
<script src="/js/axios-0.18.0.js"></script>
<script>
function fn02(){
var objectJson= {"id":1,"username":"张三","password":"123456"};
axios.post("http://localhost:8080/demo11",objectJson).then(function(response){
console.log(response.data);
});
}
</script>
@RequestMapping("/demo11")
@ResponseBody
public String demo11(@RequestBody User user){
System.out.println(user);
return "success";
}

实列:传递JSON对象数组
json数组数据与集合泛型属性名相同,定义List类型形参即可
接收参数

<h2>JSON数据参数传递--传递JSON对象数组</h2>
<input type="button" value="点我" onclick="fn03()"/>
<script src="/js/axios-0.18.0.js"></script>
<script>
function fn03(){
var objectArray=[
{"id":1,"username":"张三","password":"123456"},
{"id":2,"username":"李四","password":"123456"},
];
axios.post("http://localhost:8080/demo12",objectArray).then(function(response){
console.log(response.data);
});
}
</script>
@RequestMapping("/demo12")
@ResponseBody
public String demo12(@RequestBody List<User>list){
System.out.println(list);
return "success";
}

2.11 日期类型参数传递


相同的日期数据,可能会采用不同的日期格式,
Java默认的时间格式:yyyy/MM/dd HH:mm:ss

注意:日期传递如果yyyy/MM/dd HH:mm:ss这种格式SpringMVC默认已经转换好了

如果是其他格式那么就要去实体类里面去指定日期的格式:

例如:yyyy-MM-dd

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
private String username;
private String password;
//private Date birthday;
@DateTimeFormat(pattern = "yyyy-MM-dd")//使用@DateTimeFormat注解来指定日期的格式
private Date birthday;
}

HTML日期类型:

<h2>日期类型参数传递</h2>
<a href="http://localhost:8080/demo13?id=1&birthday=2024/10/31">点我</a>
<a href="http://localhost:8080/demo13?id=1&birthday=2024/10/31 12:12:12">点我</a>
<a href="http://localhost:8080/demo13?id=1&birthday=2024-10-31">点我</a>

后端接收数据:

@RequestMapping("/demo13")
@ResponseBody
public String demo13(User user){
System.out.println(user);
return "success";
}

注意如果不是默认格式要去实体类指定接受日期的格式不然就会封装不成功。

2.12 内置类型转换器

@EnableWebMvc功能:根据类型匹配对应的类型转换器
json → POJO

String → Date
默认情况下,SpringMVC已经实现一些数据类型自动转换。
内置转换器全都在:
org.springframework.core.convert.support

java.lang.Boolean -> java.lang.String :
ObjectToStringConverter
java.lang.Character -> java.lang.Number :
CharacterToNumberFactory
java.lang.Character -> java.lang.String :
ObjectToStringConverter
java.lang.Enum -> java.lang.String :
EnumToStringConverter
java.lang.Number -> java.lang.Character :
NumberToCharacterConverter
java.lang.Number -> java.lang.Number :
NumberToNumberConverterFactory
java.lang.Number -> java.lang.String :
ObjectToStringConverter
java.lang.String -> java.lang.Boolean :
StringToBooleanConverter
java.lang.String -> java.lang.Character :
StringToCharacterConverter
java.lang.String -> java.lang.Enum :
StringToEnumConverterFactory
java.lang.String -> java.lang.Number :
StringToNumberConverterFactory
java.lang.String -> java.util.Locale :
StringToLocaleConverter
java.lang.String -> java.util.Properties :
StringToPropertiesConverter
java.lang.String -> java.util.UUID :
StringToUUIDConverter
java.util.Locale -> java.lang.String :
ObjectToStringConverter
java.util.Properties -> java.lang.String :
PropertiesToStringConverter
java.util.UUID -> java.lang.String :
ObjectToStringConverter
....

三.响应


3.1 响应页面

@RequestMapping("/hello")
public String hello(){
System.out.println("Hello...");
return "success.jsp";
}

3.2 响应数据


3.2.1 具体操作
添加jackson的依赖

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>

开启自动转换json数据的支持

@Configuration
@ComponentScan({"com.lzw"})
@EnableWebMvc //开启SpringMVC JSON数据进行自动类型转换
public class SpringMvcConfig {
}

@ResponseBody

表明响应的是数据本身而不是一个静态资源文件,不做页面跳
转。将方法返回的对象序列化为 JSON 或 XML 格式的数据发
送给客户端。在前后端分离的项目中使用!

3.2.2 响应文本数据

<h2>响应文本数据</h2>
<a href="http://localhost:8080/demo13">点我</a>
@RequestMapping(value = "/demo13",produces ="text/html;charset=utf-8")
@ResponseBody
public String demo13(){
System.out.println();
return "成功";
}

3.2.3 响应JSON数据

<h2>响应JSON对象</h2>
<a href="http://localhost:8080/demo14">点我</a>
<h2>响应JSON数组</h2>
<a href="http://localhost:8080/demo15">点我</a>
//响应JSON对象
@RequestMapping(value = "/demo14",produces = "application/json;charset=utf-8")
@ResponseBody
public User demo14(){
User user=new User(1,"张三","123456",new Date());
return user;
}//响应JSON数组
@RequestMapping(value = "/demo15",produces = "application/json;charset=utf-8")
@ResponseBody
public List<User> demo15(){
List<User> list=new ArrayList<>();
User u01=new User(1,"张三","123456",new Date());
User u02=new User(2,"李四","123456",new Date());
list.add(u01);
list.add(u02);
return list;
}

3.3 响应统一数据格式

响应统一数据格式必须在创建一个实体类:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
private int code;//响应状态码
private String msg;//响应消息
private Object data;//响应数据
}
<h2>响应统一状态码</h2>
<input type="button" value="点我" onclick="fn04()"/>
<script src="/js/axios-0.18.0.js"></script>
<script>
function fn04(){
axios.post("http://localhost:8080/demo16").then(function(response){
console.log(response);
console.log(response.data);
console.log(response.data.code);
console.log(response.data.msg);
console.log(response.data.data);
});
}
</script>
@RequestMapping(value = "/demo16",produces ="application/json;charset=utf-8")
@ResponseBody
public Result demo16(){
List<User> list=new ArrayList<>();
User u01=new User(1,"张三","123456",new Date());
User u02=new User(2,"李四","123456",new Date());
list.add(u01);
list.add(u02);
Result result=new Result(20000,"查询成功",list);
return result;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词