Spring MVC入门5

你能学到什么

  • 获取header的两种方式
  • 学习Spring MVC的第三部分 " 响应 "
    • 返回静态页面
    • 返回HTML代码
    • 返回JSON
    • 设置状态码

正文

获取header

获取Header也是从 HttpServletRequest 中获取

  • 再举个例子
获取header的简洁方法(@RequestHeader)

@RequestHeader注解的参数值为HTTP请求报头中的?Key?

响应
返回静态页面

Http响应结果可以是数据, 也可以是静态⻚⾯,也可以针对响应设置状态码, Header信息等

我们以响应静态页面为例:

  • 创建前端⻚⾯ index.html(注意路径)
  • 将以下代码粘过去
xml 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Index⻚⾯</title>
</head>
<body>
Hello,Spring MVC,我是Index⻚⾯.
</body>
</html>

然后右键点击index.html,找到Explorer

点开之后就找到了一个HTML文件,打开,验证你的网页是否能正常显示

如果是这样,那就是正常的

此时我们就已经将 要显示的前端页面搞好了。

之后就是后端代码的书写了

但是,真实的原因却是@RestController的问题

我们需要把 @RestController 改为 @Controller

  • 原因:前⾯使⽤的 @RestController 其实是返回的数据.
    @RestController = @Controller + @ResponseBody
    @Controller : 定义⼀个控制器, Spring 框架启动时加载, 把这个对象交给Spring管理.
    @ResponseBody : 定义返回的数据格式为⾮视图, 返回⼀个 text/html 信息
    所以,假如我们使用了@RestController 此时返回就是数据,不能返回视图或者html信息
    正确的做法是:

    我们能先看一下@RestController 的源码:
java 复制代码
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
@AliasFor(
annotation = Controller.class
)
String value() default "";
}

所以只要把@ResponseBody 去掉就行

我们上⾯讲到, @ResponseBody 表⽰返回数据.那么如果在@Controller下面加上@ResponseBody那么是不是也是返回数据呢?我们试验一下:

可以看到我们的猜想是正确的,只返回了数据,没有返回页面

@ResponseBody的用法

@ResponseBody 既是类注解, ⼜是⽅法注解

如果作⽤在类上, 表⽰该类的所有⽅法, 返回的都是数据, 如果作⽤在⽅法上, 表⽰该⽅法返回的是数据.

也就是说: 在类上添加 @ResponseBody 就相当于在所有的⽅法上添加了 @ResponseBody 注解.

同样, 如果类上有 @RestController 注解时:表⽰所有的⽅法上添加了 @ResponseBody 注解, 也就是当前类下所有的⽅法返回值做为响应数据

如果⼀个类的⽅法⾥, 既有返回数据的, ⼜有返回⻚⾯的, 就把 @ResponseBody 注解添加到对应的⽅法上即可.

返回HTML代码片段

后端返回数据时, 如果数据中有HTML代码, 也会被浏览器解析

返回JSON
设置状态码

通过Spring MVC的内置对象HttpServletResponse 提供的⽅法来进⾏设置

讲到这,我们的Spring MVC的概念部分就讲完了,后面我们就要上一些简单的案例来加深理解了。

相关推荐
月阳羊6 分钟前
【硬件-笔试面试题-95】硬件/电子工程师,笔试面试题(知识点:RC电路中的时间常数)
java·经验分享·单片机·嵌入式硬件·面试
Bigemap11 分钟前
BigemapPro快速添加历史影像(Arcgis卫星地图历史地图)
java·开发语言
IT学长编程14 分钟前
计算机毕业设计 基于Hadoop的健康饮食推荐系统的设计与实现 Java 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
java·大数据·hadoop·毕业设计·课程设计·推荐算法·毕业论文
hrrrrb23 分钟前
【Python】字符串
java·前端·python
mkhase31 分钟前
9.12-QT-基本登陆界面实现
java·jvm·qt
若鱼191931 分钟前
spring-kafka消费异常处理
spring·kafka
yinke小琪33 分钟前
说说hashCode() 和 equals() 之间的关系
java·后端·面试
若鱼191937 分钟前
Kafka如何配置生产者拦截器和消费者拦截器
java·kafka
渣哥42 分钟前
Java 自适应自旋锁机制详解:原理、优缺点与应用场景
java
摇滚侠1 小时前
java语言中,list<String>转成字符串,逗号分割;List<Integer>转字符串,逗号分割
java·windows·list