在博主前面写的博客 【Java EE】Spring请求如何传递参数详解 中我们已经设置了响应数据,Http响应结果可以是数据,也可以是静态⻚⾯,也可以针对响应设置状态码, Header信息等
🎍返回静态页面
首先我们像创建一个静态界面,创建位置如下:
前端代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UT
<title>Index⻚⾯<
</head>
<body>
Hello,Spring MVC,
</body>
</html>
不过这里的后端的代码和以前的代码就不一样了,想要返回一个静态界面。我们这里需要将 @RestController 改为 @Controller
后端代码如下:
@RestController
public class IndexController {
@RequestMapping("/index")
public Object index(){
//返回index.html
return "/index.html";
}
}
运⾏结果:http://127.0.0.1:8080/index
在博主前面的博文中写返回数据的时候用的是 @RestController 注解,而现在返回静态界面却用的 @Controller 。它们之间有什么区别和联系呢?
🌲@RestController 与 @Controller 的关联和区别
博主在 【Java EE】初识Spring Web MVC 中讲了MVC模式, 后端会返回视图,这是早期时的概念
随着互联⽹的发展, ⽬前项⽬开发流⾏"前后端分离"模式, Java主要是⽤来做后端项⽬的开发,所以也就不再处理前端相关的内容了
MVC的概念也逐渐发⽣了变化, View不再返回视图, ⽽是返回显⽰视图时需要的数据.
所以前⾯使⽤的 @RestController 其实是返回的数据
@RestController = @Controller + @ResponseBody
@Controller : 定义⼀个控制器,Spring 框架启动时加载, 把这个对象交给Spring管理. @ResponseBody
:定义返回的数据格式为⾮视图,返回⼀个test /html信息
如果想返回视图的话, 只需要把 @ResponseBody 去掉就可以了, 也就是 @Controller
🌴返回数据 @ResponseBody
@ResponseBody 既是类注解, ⼜是⽅法注解
如果作⽤在类上, 表⽰该类的所有⽅法, 返回的都是数据, 如果作⽤在⽅法上, 表⽰该⽅法返回的是数据.
如果⼀个类的⽅法⾥, 既有返回数据的, ⼜有返回⻚⾯的, 就把 @ResponseBody 注解添加到对应的⽅
法上即可
@RequestMapping("ct4")
@Controller
public class test\_1\_4 {
@RequestMapping("/test1")
public Object test1() {
return "/index.html";
}
@RequestMapping("/test2")
@ResponseBody
public String test2() {
return "返回的是数据";
}
}
程序会认为需要返回的是视图, 根据内容去查找⽂件, 但是查询不到, 路径不存在, 报404
🎋返回HTML代码片段
@RequestMapping("/returnHtml")
@ResponseBody
public String returnHtml() {
return "<h1>Hello,HTML~</h1>";
}
通过Fiddler观察响应结果, Content-Type 为 text/html
响应中的 Content-Type 常⻅取值有以下⼏种:
• text/html : body 数据格式是 HTML
• text/css : body 数据格式是 CSS
• application/javascript : body 数据格式是 JavaScript
• application/json : body 数据格式是 JSON
如果请求的是js⽂件, Spring MVC会⾃动设置Content-Type为 application/javascript
如果请求的是css⽂件, Spring MVC会⾃动设置Content-Type为 text/css
@RequestMapping("/index2")
public Object index2(){
return "/a.js";
}
@RequestMapping("/index3")
public Object index3(){
return "/b.css";
}
🍃返回JSON
Spring MVC 也可以返回JSON
后端⽅法返回结果为对象
@RequestMapping("/returnJson")
@ResponseBody
public HashMap<String, String> returnJson() {
HashMap<String, String> map = new HashMap<>();
map.put("Java", "Java Value");
map.put("MySQL", "MySQL Value");
map.put("Redis", "Redis Value");
return map;
}
运⾏程序, 浏览器响应结果如下: http://127.0.0.1:8080/returnJson
通过Fiddler抓包观察响应结果, Content-Type 为 application/json