目录
1 响应
1.1 返回静态页面
1.2 返回数据@ResponseBody
1.3 返回HTML代码片段
1.4 返回JSON
1.5 设置状态码
1 响应
1.1 返回静态页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index页面</title>
</head>
<body>
Spring MVC,index页面.
</body>
</html>
@RequestMapping("/use")
@RestController
public class SpringBoot {
@RequestMapping("/index")
public String index() {
//返回index.html
return "/index.html";
}
}
这时候我们的页面没有正确展示出来 ,http相应吧"/index.html"当做了http响应正文的数据,要想让Spring MVC正确的识别index.html是一个静态页面,并正确返回,我们需要把@RestController改为@Controller
@RequestMapping("/use")
@Controller
public class SpringBoot {
@RequestMapping("/index")
public String index() {
//返回index.html
return "/index.html";
}
}
@RestController和@Controller的区别
在早期的概念中,MVC模式,后端会返回视图,目前项目开发流行"前后端分离"模式,Java主要用来做后端开发,所以就不在处理前端的内容了,MVC的概念页发生了变化,View不在返回视图,而是返回视图所需的数据了
@RestController其实就是返回数据,@RestController=@Controller + @ResponseBody
@Controller:定义一个控制器,Spring框架启动时加载,把这个对象交给Spring管理
@ResponseBody:定义返回的数据格式为非视图,返回一个text/html信息
因此,想返回视图的话,只需要把@ResponseBody去掉就可以了,也就是@Controller
1.2 返回数据@ResponseBody
@RequestMapping("/use")
@Controller
@ResponseBody
public class SpringBoot {
@RequestMapping("/index")
public String index() {
//返回index.html
return "/index.html";
}
}
只需要加上 @ResponseBody注解,该方法就会把"/index.html"当做一个数据返回给前端
@ResponseBody即是类注解,又是方法注解
如果作用在类上,表示该类的所有方法,返回的都是数据,如果作用在方法上,表示该方法返回的是数据,也就是在类上条件 @ResponseBody就相当于在所有方法上添加 @ResponseBody注解
如果一个类的方法里,即有返回数据,又有返回页面的,就需要把 @ResponseBody注解到对应的方法上
@RequestMapping("/use")
@Controller
public class SpringBoot {
@RequestMapping("/index")
public String index() {
//返回index.html
return "/index.html";
}
@RequestMapping("/Data")
@ResponseBody
public String Data() {
return "返回数据";
}
}
写多个注解是,没有先后顺序
@RequestMapping("/use")
@Controller
public class SpringBoot {
@RequestMapping("/index")
public String index() {
return "/index.html";
}
@RequestMapping("/Data")
public String Data() {
return "返回数据";
}
}
如果去掉@ResponseBody注解,程序会报404错误,因为程序认为需要返回的视图,根据内容去查找文件,但是查询不到,路径不存在,报404
1.3 返回HTML代码片段
@RequestMapping("/use")
@RestController
public class SpringBoot {
@ResponseBody
@RequestMapping("/returnHTML")
public String returnHTML() {
return "<h1>Spring,HTML</h1>";
}
}
通过抓包可以看到Content-Type为text/html
在响应中的Content-Type常见的有以下几种:
text/html:body数据格式是HTML
text/css:body数据格式为CSS
application/javscript:body数据格式为JavaScript
application/json:body数据格式为JSON
1.4 返回JSON
@RequestMapping("/use")
@RestController
public class SpringBoot {
@ResponseBody
@RequestMapping("/returnJson")
public HashMap<String,String> returnJson() {
HashMap<String,String> map = new HashMap<>();
map.put("1","1");
map.put("2","2");
return map;
}
}
通过抓包,可以看到响应的格式为json格式
当接口返回的是String时,Content-Type是text/html
当接口返回的是对象时,Content-Type是application/json
1.5 设置状态码
@RequestMapping("/use")
@RestController
public class SpringBoot {
@ResponseBody
@RequestMapping("/setStatus")
public String setStatus(HttpServletResponse response) {
response.setStatus(401);
return "设置成功";
}
}