【Spring教程29】Spring框架实战:从零开始学习SpringMVC 之 服务器响应知识全面详解

目录

  • 1 环境准备
  • 2 响应页面
  • 3 返回文本数据
  • 4 响应JSON数据
  • 5 知识点总结

欢迎大家回到《Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《如何在windows11下安装Maven并配置以及 IDEA配置Maven环境》,本文的上一篇为《SpringMVC 之 请求与请求参数详解》
在这里插入图片描述
上一节我们说了SpringMvc请求知识,这一节我们来说一下响应。
SpringMVC接收到请求和数据后,进行一些了的处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户。

比如:根据用户ID查询用户信息、查询用户列表、新增用户等。

对于响应,主要就包含两部分内容:

  • 响应页面
  • 响应数据
    • 文本数据
    • json数据
      因为异步调用是目前常用的主流方式,所以我们需要更关注的就是如何返回JSON数据,对于其他只需要认识了解即可。

1 环境准备

  • 创建一个Web的Maven项目
  • pom.xml添加Spring依赖
<?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.itheima</groupId>
<artifactId>springmvc_05_response</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
  • 创建对应的配置类
public class ServletContainersInitConfig extends
AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() {
return new Class[0];
}protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}protected String[] getServletMappings() {
return new String[]{"/"};
}//乱码处理
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
return new Filter[]{filter};
}
}@Configuration
@ComponentScan("com.itheima.controller")
//开启json数据类型自动转换
@EnableWebMvcpublic class SpringMvcConfig {
}
  • 编写模型类User
public class User {private String name;private int age;//getter...setter...toString省略
}
  • webapp下创建page.jsp
<html>
<body>
<h2>Hello Spring MVC!</h2>
</body>
</html>
  • 编写UserController
@Controller
public class UserController {
}

最终创建好的项目结构如下:
在这里插入图片描述

2 响应页面

  • 步骤1:设置返回页面
@Controller
public class UserController {
@RequestMapping("/toJumpPage")
//注意
//1.此处不能添加@ResponseBody,如果加了该注入,会直接将page.jsp当字符串返回前端
//2.方法需要返回String
public String toJumpPage(){
System.out.println("跳转页面");
return "page.jsp";
}
}
  • 步骤2:启动程序测试
    此处涉及到页面跳转,所以不适合采用PostMan进行测试,直接打开浏览器,输入http://localhost/toJumpPage
    在这里插入图片描述

3 返回文本数据

  • 步骤1:设置返回文本内容
@Controller
public class UserController {
@RequestMapping("/toText")
//注意此处该注解就不能省略,如果省略了,会把response text当前页面名称去查找,如果没有
回报404错误
@ResponseBody
public String toText(){
System.out.println("返回纯文本数据");
return "response text";
}
}
  • 步骤2:启动程序测试

此处不涉及到页面跳转,因为我们现在发送的是post请求,可以使用浏览器也可以使用PostMan进行测试,输入地址http://localhost/toText访问
在这里插入图片描述

4 响应JSON数据

  • 响应POJO对象
@Controller
public class UserController {
@RequestMapping("/toJsonPOJO")
@ResponseBody
public User toJsonPOJO(){
System.out.println("返回json对象数据");
User user = new User();
user.setName("itcast");
user.setAge(15);
return user;
}
}

返回值为实体类对象,设置返回值为实体类类型,即可实现返回对应对象的json数据,需要依赖
@ResponseBody注解和@EnableWebMvc注解
重新启动服务器,访问http://localhost/toJsonPOJO
在这里插入图片描述

  • 响应POJO集合对象
@Controller
public class UserController {
@RequestMapping("/toJsonList")
@ResponseBody
public List<User> toJsonList(){
System.out.println("返回json集合数据");
User user1 = new User();
user1.setName("传智播客");
user1.setAge(15);
User user2 = new User();
user2.setName("黑马程序员");
user2.setAge(12);
List<User> userList = new ArrayList<User>();
userList.add(user1);
userList.add(user2);
return userList;
}
}

重新启动服务器,访问http://localhost/toJsonList
在这里插入图片描述

5 知识点总结

  • 知识点1:@ResponseBody
    在这里插入图片描述
    说明:
  • 该注解可以写在类上或者方法上
  • 写在类上就是该类下的所有方法都有@ReponseBody功能
  • 当方法上有@ReponseBody注解后
    • 方法的返回值为字符串,会将其作为文本内容直接响应给前端
    • 方法的返回值为对象,会将对象转换成JSON响应给前端

此处又使用到了类型转换,内部还是通过Converter接口的实现类完成的,所以Converter除了前面所说的功能外,它还可以实现:

  • 对象转Json数据(POJO -> json)
  • 集合转Json数据(Collection -> json)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/224895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp:使用fixed定位,iOS平台的安全区域问题解决

manifest.json > 添加节点 "safearea": { //iOS平台的安全区域"background": "#1C1E22","backgroundDark": "#1C1E22", // HX 3.1.19支持"bottom": {"offset": "auto"} },已解决&#xff…

OpenAI发布了一份提示工程指南(Prompt Engineering Guide)

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 Open AI 发布了一份很棒的提示工程指南。 以下是在 GPT-4 使用提示时获得更好结果的 6 种策略的总结:

elasticsearch|大数据|kibana的安装(https+密码)

前言&#xff1a; kibana是比较好安装的&#xff0c;但https密码就比较麻烦一些了&#xff0c;下面将就如何安装一个可在生产使用的kibana做一个简单的讲述 一&#xff0c; kibana版本和下载地址 这里我想还是强调一下&#xff0c;kibana的版本需要和elasticsearch的版本一…

【FunASR】Paraformer语音识别-中文-通用-16k-离线-large-onnx

模型亮点 模型文件: damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorchParaformer-large长音频模型集成VAD、ASR、标点与时间戳功能&#xff0c;可直接对时长为数小时音频进行识别&#xff0c;并输出带标点文字与时间戳&#xff1a; ASR模型…

vue中哪些数组的方法可以做到响应式

Vue2 中为什么直接通过数组的索引修改元素是不会触发视图更新 vue2 为什么不直接监听数组 Vue2 对于数组提供了一些变异方法 重写数组方法源码分析 定义拦截器将拦截器挂载到数组上面收集依赖 扩展&#xff1a;理解Vue2如何解决数组和对象的响应式问题 对复杂对象的处理 复杂对…

目标检测图片截取目标分类图片

如果要训练一个分类模型却没有特定的分类数据集怎么办呢&#xff1f;可以换一种思路&#xff0c;将带有该目标的图片对所有想要的目标进行画标注框然后进行截图&#xff0c;就能得到特定的分类数据了。这么做的目的是&#xff1a;带有该目标的图片可能不会少&#xff0c;但是带…

MySQL作为服务端的配置过程与实际案例

MySQL是一款流行的关系型数据库管理系统&#xff0c;广泛应用于各种业务场景中。作为服务端&#xff0c;MySQL的配置过程对于数据库的性能、安全性和稳定性至关重要。本文将详细介绍MySQL作为服务端的配置过程&#xff0c;并通过一个实际案例进行举例说明。 一、MySQL服务端配…

VSCode如何编辑Markdown文件

VSCode如何编辑Markdown文件 一、安装插件二、常用命令 一、安装插件 需要在VSCode安装一个插件Markdown Theme Kit 二、常用命令 1、CtrlShiftV 预览模式

spring-cloud-stream-kafka生产速度慢

包版本spring-cloud-starter-stream-kafka:3.1.0 修改yaml配置 添加poller配置

Python多态原理及实现

对于弱类型的语言来说&#xff0c;变量并没有声明类型&#xff0c;因此同一个变量完全可以在不同的时间引用不同的对象。当同一个变量在调用同一个方法时&#xff0c;完全可能呈现出多种行为&#xff08;具体呈现出哪种行为由该变量所引用的对象来决定&#xff09;&#xff0c;…

人工智能与低代码:前端技术的双重变革

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;和低代码开发平台已经成为当下热门的话题。在前端技术领域&#xff0c;这两大技术的崛起正在悄然改变开发模式&#xff0c;提高开发效率&#xff0c;降低技术门槛。本文将从以下几个方面&#xff0c;详细探讨…

Netty介绍

1. Netty介绍 是一个异步的、基于事件驱动的网络应用框架&#xff0c;用以开发高性能&#xff0c;高可靠性的网络io程序。Netty主要针对在TCP协议下&#xff0c;面向clients端的高并发应用&#xff0c;或者peer-to-peer场景下大量数据持续传输的应用。Netty本质上是一个NIO框架…

都有哪些大厂开始适配鸿蒙原生应用呢

12月8日&#xff0c;随着支付宝宣布启动鸿蒙原生应用开发以来&#xff0c;国内宣布接入鸿蒙原生应用开发的公司越来越多。事实上&#xff0c;自9月华为宣布鸿蒙原生应用全面启动以来&#xff0c;已有金融、旅行、社交等多个领域的企业和开发者陆续宣布加入鸿蒙生态&#xff0c;…

配电房智能运维工具-电易云

配电房智能运维是将云计算、物联网、大数据与“互联网”服务理念相结合&#xff0c;采用“线上线下”的服务模式&#xff0c;为电力终端用户提供托管式配电智能运维服务。电易云智慧电力物联网是以提高电力运行安全&#xff0c;降低运维成本为目标&#xff0c;采用物联网、云计…

Linux-CentOS7(无图形界面版)部署stable-diffusion-webui 全过程

Linux-CentOS7&#xff08;无图形界面版&#xff09;部署Stable Diffusion webui 全过程 前置要求 git的版本不能是CentOS默认的版本&#xff08;1.8&#xff09;&#xff0c;版本太老&#xff0c;在后面安装过程会失败。去github上下载最新的git源码包 安装成功显示版本号 …

github 学习番外篇

我们可以按照仓库开始的提示提交仓库 不知道为什么 出现了 我用 git branch 查看了一下&#xff0c;竟然没发现分支 后来发现是只有commit以后才会显示这个分支 后来显示 这是因为本地和远程仓库不同步的原因 这时候我们就需要git pull 一下 发现两个仓库由于不关联不能git…

衡兰芷若成绝响,人间不见周海媚(4k修复基于PaddleGan)

一代人有一代人的经典回忆&#xff0c;1994年由周海媚、马景涛、叶童主演的《神雕侠侣》曾经风靡一时&#xff0c;周海媚所诠释的周芷若凝聚了汉水之钟灵&#xff0c;峨嵋之毓秀&#xff0c;遇雪尤清&#xff0c;经霜更艳&#xff0c;俘获万千观众&#xff0c;成为了一代人的共…

Gartner发布2024年网络安全预测 :IAM 和数据安全相结合,解决长期存在的挑战

安全和风险管理领导者需要采用可组合的数据安全视图。这项研究预测&#xff0c;将数据安全创新应用于痛点和高级用例将有助于组织将其数据用于几乎任何用例。 主要发现 在所有云服务模型中&#xff0c;数据安全以及身份和访问管理 (IAM) 的责任均由最终客户承担。 由于这两个学…

Python等比例缩放图片并修改对应的Labelme标注文件(v2.0)

Python等比例缩放图片并修改对应的Labelme标注文件&#xff08;v2.0&#xff09; 前言前提条件相关介绍实验环境Python等比例缩放图片并修改对应的Labelme标注文件Json文件代码实现输出结果 前言 此版代码&#xff0c;相较于Python等比例缩放图片并修改对应的Labelme标注文件&a…

seleniumwire获取页面接口数据

selenium并不支持获取响应的数据&#xff0c;我们可以使用selenium-wire库&#xff0c;selenium-wire扩展了 Selenium 的 Python 绑定&#xff0c;可以访问浏览器发出的底层请求。 编写的代码与 Selenium 的方式相同。 1. 先安装seleniumwire的插件 pip install selenium-wir…