
**目录**
[响应](#响应)
[返回静态页面](#返回静态页面)
[@RestController 和 @Controller的区别和联系](#@RestController-和-@Controller的区别和联系)
[返回数据@ResponseBody](#返回数据@ResponseBody)
[关于@ResponseBody](#关于@ResponseBody)
[返回HTML代码片段](#返回HTML代码片段)
[返回JSON](#返回JSON)
[设置状态码](#设置状态码)
[设置Header](#设置Header)
[设置Content-Type](#设置Content-Type)
[没设置Content-Type之前](#没设置Content-Type之前)
[设置Content-Type之后](#设置Content-Type之后)
* * *
#### 响应
##### 返回静态页面
在`resources/static`路径下创建一个HTML文件:
```html
Index页面
Hello, Spring MVC, 我是Index页面。
处理并返回index.html
的代码:
@RestController
public class ResponseController {
@RequestMapping("/index")
public String index() {
return "/index.html";
}
}
响应结果:
却发现页面未正确返回,HTTP响应把"/index.html"
当作了HTTP响应正文的数据。那么,Spring MVC如何识别出index.html
是一个静态页面,并进行返回呢?我们需要将@RestController
改为@Controller
。
修改后的代码:
@Controller
public class ResponseController {
@RequestMapping("/index")
public String index() {
return "/index.html";
}
}
响应结果:
@RestController 和 @Controller的区别和联系
@RestController = @ResponseBody + @Controller
联系:
- 组合关系:
@RestController
可以被视为@Controller
和@ResponseBody
的组合注解。这意味着,当你在类上使用@RestController
注解时,它实际上同时应用了@Controller
和@ResponseBody
的效果。- 用途相似:两者都用于处理HTTP请求,但它们处理请求后返回的内容类型不同。
区别:
- 返回内容类型:
@Controller
:用于处理HTTP请求,并将处理结果返回给客户端。控制器类中的方法通常通过@RequestMapping
或其衍生注解来映射特定的URL请求路径和HTTP方法。返回的结果可以是一个视图名称,框架会根据视图解析器将其解析为具体的视图页面(如HTML页面)。@RestController
:专门用于构建RESTful API。与@Controller
不同的是,@RestController
注解的类中的每个方法都默认返回JSON、XML或其他数据类型,而不是视图。在Spring MVC中,使用@RestController
相当于在每个方法上都添加了@ResponseBody
注解,用于直接返回数据对象或集合,而不是视图。- 应用场景:
@Controller
:通常用于传统的Web应用开发,负责处理HTTP请求,并返回视图页面。它适用于需要渲染视图页面的场景,如动态网站开发。@RestController
:则专门用于构建RESTful API,处理HTTP请求,并直接返回数据对象或集合,而不是视图。它适用于构建微服务、移动应用后端服务等需要直接提供数据接口的场景。
默认行为:- 使用
@Controller
注解的类,其方法默认返回的是视图名称,需要配合视图解析器来渲染视图。- 使用
@RestController
注解的类,其方法默认返回的是JSON、XML等数据格式,Spring MVC会自动将数据对象序列化为相应的格式,并设置正确的HTTP响应头。
返回数据@ResponseBody
@ResponseBody
@RequestMapping("/indexData")
public String indexData() {
return "返回数据";
}
关于
文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4494.html