阿华代码,不是逆风,就是我疯
你们的点赞收藏是我前进最大的动力!!
希望本文内容能够帮助到你!!
目录
(3)@RestController 和 @Controller关联
一:实践
1:获取header
(1)普通方法
使⽤HttpServletRequest 提供的getHeader⽅法来获取, 参数对应HTTP请求报头的"Key"@RequestMapping("/param1")
public String param1(HttpServletRequest request , HttpServletResponse response){
String userAgent = request.getHeader("User-Agent");
return "userAgent "+ ":" + userAgent;
}
(2)简洁方法获取 Header
@RequestMapping("/param2")
public String para2(@RequestHeader("User-Agent") String userAgent){
return "userAgent "+ ":" + userAgent;
}
运行结果
fiddler抓包验证
2:返回静态页面
(1)返回静态页面失败
前端代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Index页面</title>
</head>
<body>
Hello,Spring MVC,我是index页面
</body>
</html>
后端代码
@RestController
public class IndexController {
@RequestMapping("/index")
public Object index(){
//返回index.html
return "/index.html";
}
}
运行结果
结果却发现, ⻚⾯未正确返回, http响应把 "/index.html" 当做了http响应正⽂的数据(2)Controller
我们需要把 @RestController 改为 @Controller@Controller
public class IndexController {
@RequestMapping("/index")
public Object index(){
return "/index.html";
}
}
(3)@RestController 和 @Controller关联
@RestController = @Controller + @ResponseBody @Controller : 定义⼀个控制器, Spring 框架启动时加载, 把这个对象交给Spring管理. @ResponseBody : 定义返回的数据格式为⾮视图, 返回⼀个 text/html 信息 如果想返回视图的话, 只需要把 @ResponseBody 去掉就可以了, 也就是 @Controller3:返回数据@ResponseBody
加上 @ResponseBody 注解, 该⽅法就会把 "/index.html" 当做⼀个数据返回给前端@Controller
@ResponseBody
public class IndexController {
@RequestMapping("/index")
public Object index(){
return "/index.html";
}
}
①@ResponseBody
既是类注解, ⼜是⽅法注解
如果作⽤在类上, 表⽰该类的所有⽅法, 返回的都是数据, 如果作⽤在⽅法上, 表⽰该⽅法返回的是数据
②如果类上有
@RestController
注解时:表⽰所有的⽅法上添加了
@ResponseBody
注
解, 也就是当前类下所有的⽅法返回值做为响应数据
③如果⼀个类的⽅法⾥, 既有返回数据的, ⼜有返回⻚⾯的, 就把
@ResponseBody
注解添加到对应的⽅法上即可
4:返回HTML代码片段
后端返回数据时, 如果数据中有HTML代码, 也会被浏览器解析@RequestMapping("/returnHtml")
@ResponseBody
public String returnHtml(){
return "<h1>Hello,HTML~</h1>";
}
通过Fiddler观察响应结果,
Content-Type
为
text/html
(1) 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
5:返回JSON
@RequestMapping("/returnJson")
@ResponseBody
public HashMap<String,String> returnJson(){
HashMap<String,String> hashmap = new HashMap<>();
hashmap.put("张三","畏罪潜逃");
hashmap.put("李四","知法犯法");
hashmap.put("王五","不知悔改");
return hashmap;
}
通过Fiddler观察响应结果,
Content-Type
为
application/json
6:设置状态码
Spring MVC会根据我们⽅法的返回结果⾃动设置响应状态码, 程序员也可以⼿动指定状态码 通过Spring MVC的内置对象HttpServletResponse 提供的⽅法来进⾏设置 状态码不影响⻚⾯的展⽰ @RequestMapping(value = "/setStatus")
@ResponseBody
public String setStatus(HttpServletResponse response){
response.setStatus(401);
return "设置状态码成功";
}
7:设置Header
Http响应报头也会向客⼾端传递⼀些附加信息, ⽐如服务程序的名称,请求的资源已移动到新地址等, 如: Content-Type, Local等. 这些信息通过 @RequestMapping 注解的属性来实现 先来看 @RequestMapping 的源码1. value: 指定映射的URL 2. method: 指定请求的method类型, 如GET, POST等 3. consumes: 指定处理请求(request)的提交内容类型(Content-Type),例如application/json, text/html; 4. produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回 5. Params: 指定request中必须包含某些参数值时,才让该⽅法处理 6. headers: 指定request中必须包含某些指定的header值,才能让该⽅法处理请求
(1)设置Content-Type
我们通过设置 produces属性的值, 设置响应的报头Content-Type @RequestMapping(value = "/returnJson2" , produces = "application/json")
@ResponseBody
public String returnJson2(){
return "{\"success\":true}";//转义字符
}
浏览器响应结果
postman测试
fiddler抓包
(2)设置响应编码
设置返回类型时, 也可以同步设置响应编码@RequestMapping(value = "/returnJson3" ,
produces = "application/json;charset = utf-8")
@ResponseBody
public String returnJson3(){
return "{\"你大爷\":true}";//转义字符
}
(3)设置其它Header
设置其他Header的话, 需要使⽤Spring MVC的内置对象HttpServletResponse 提供的⽅法来进⾏设置 void setHeader(String name, String value) 设置⼀个带有给定的名称和值的 header. 如果 name 已经存在, 则覆盖旧的值@RequestMapping("/setHeader")
@ResponseBody
public String setHeader(HttpServletResponse response){
response.setHeader("柳贯一","boss");
return "设置header成功";
}
标签:实战,返回,入门,index,SpringMVC,ResponseBody,设置,public,RequestMapping
From: https://blog.csdn.net/2301_80133875/article/details/143690200