目录
2.1.1 produces(修改响应的 Content-Type)
引言
前面的几篇博文中, 介绍的都是和请求相关的内容, 通过 Spring 的方法来接收请求中相关信息.
本篇博客介绍响应相关的知识, 通过 Spring 来设置响应中的值, 向客户端返回设置好的响应.
1. 返回 Web 视图
Web 视图(如 HTML 页面).
我们首先使用 html 写一个前端页面, 再通过 Spring 方法, 将这个 html 页面作为响应的内容, 展示给用户.
显然, 方法返回的只是一个字符串, 并非 html 展示的页面.
如何将 html 页面返回给客户端呢?? 这需要修改 类注解.
若方法返回的是一个视图, 则需要将原来的类注解 @RestController 修改为 @Controller.
接下来, 对涉及到的几个注解逐个进行解释.
1.1 Spring 默认扫描路径
我们知道, 每一个路径, 都对应了一个方法. 当服务器收到客户端的请求时, Spring 就会根据请求中的资源路径, 寻找该路径对应的方法, 进而计算响应结果, 最后返回响应.
而 Spring 中有大量的方法存在, 包括使用 Maven 引入的第三方库, 都存在于 Spring 中. 若 Spring 要扫描所有的方法, 一个一个的去进行比对, 确定哪个是资源路径所对应的方法的话, 那工作量是巨大的.
因此, Spring 有一个默认扫描路径: 只扫描启动类所在的目录, 及其子目录.
若请求中资源路径对应的方法, 属于启动类所在目录或子目录时, 会被 Spring 扫描到:
而当请求中资源路径所对应的方法, 不属于启动类所在目录或子目录时, 则 Spring 不会扫描, 客户端就会显示错误:
因此, Spring 也当然不会扫描 Maven 中第三方库中的方法.
有了默认的扫描路径, 大大降低了 Spring 的工作量, 提升了开发效率.
1.2 @RestController
虽然 Spring 有默认的扫描路径, 但是当项目很大时, 这个路径下也是会有很多的方法存在的.
于是, 可以使用 @RestController 对类进行标记, Spring 只需扫描被 @RestController 标记的类.
因此, Spring 的扫描对象为: 默认扫描路径中的类 && 使用 @RestController 进行标记的类
当默认路径下的类没有使用 @RestController 进行标记时, 那么 Spring 也不会进行扫描, 进一步减少了 Spring 的工作量.
@RestController 的特性如下:
- 类注解. 只能对类进行使用
- 存活于运行阶段. (整个项目运行时, 都存在)
- 包含 @Controller 和 @ResponseBody
其中, @Controller 表示返回的是页面. @ResponseBody 表示返回的是数据.
@RestController 也表示返回的是数据.
由于 @RestControll