网站首页 > 教程文章 正文
在构建现代 Web 应用时,Spring Boot 提供了强大的请求处理功能。本文将深入探讨 Spring Boot 中的各种请求处理方式,包括 @RequestParam、@RequestBody、@RequestHeader、@CookieValue、HttpEntity,以及如何使用原生 Servlet API 获取请求对象。此外,我们还将讨论 @ResponseBody 的使用,以及文件上传和下载的实现。
1. @RequestParam
@RequestParam 注解用于处理请求参数。它将 URL 中的查询参数映射到方法的参数。
示例:
@GetMapping("/login")
public String login(@RequestParam("name") String name, @RequestParam("password") String password) {
System.out.println(String.format("用户名:%s\t\t密码:%s", name, password));
return "OK";
}
### 1.使用普通变量,接收请求参数
GET {{host}}/user/login?name=ijunfu&password=123456
accept: application/json
2. @RequestBody
@RequestBody 注解用于将请求体中的 JSON 数据转换为 Java 对象。它通常与 POST 或 PUT 请求一起使用。
示例:
@Data
@ToString
public class LoginForm implements java.io.Serializable {
private static final long serialVersionUID = 291217L;
private String name;
private String password;
}
@GetMapping("/login2")
public String login2(@RequestBody LoginForm form) {
System.out.println(form);
return "OK";
}
GET {{host}}/user/login2
Content-Type: application/json
{
"name": "ijunfu",
"password": "123456"
}
3. @RequestHeader
@RequestHeader 注解用于获取请求头信息。
示例:
@GetMapping("/login3")
public String login3(@RequestBody LoginForm form, @RequestHeader("type") Integer type) {
System.out.println(String.format("type=%d", type));
System.out.println(form);
return "OK";
}
GET {{host}}/user/login3
Content-Type: application/json
type: 1
{
"name": "ijunfu",
"password": "123456"
}
4. @CookieValue
@CookieValue 注解用于获取请求中的 Cookie。
示例:
@GetMapping("/login4")
public String login4(@RequestBody LoginForm form, @CookieValue("type") String type) {
System.out.println(String.format("type=%s", type));
System.out.println(form);
return "OK";
}
GET {{host}}/user/login4
Content-Type: application/json
Cookie: type=1
{
"name": "ijunfu",
"password": "123456"
}
5. HttpEntity
HttpEntity 是一个用于封装请求和响应体的类。它可以与 @RequestBody 和 @ResponseBody 一起使用。
示例:
@GetMapping("/login5")
public String login5(HttpEntity<String> httpEntity) {
HttpHeaders headers = httpEntity.getHeaders();
List<MediaType> accept = headers.getAccept();
MediaType contentType = headers.getContentType();
System.out.println("客户接收类型:" + accept);
System.out.println("请求体类型:"+contentType);
String body = httpEntity.getBody();
System.out.println("请求体:" + body);
return "OK";
}
GET {{host}}/user/login5
Content-Type: application/json
Accept: application/json
{
"name": "ijunfu"
}
6. 使用原生 Servlet API 获取请求对象
可以通过 HttpServletRequest 获取原生请求对象。
示例:
@GetMapping("/login6")
public void login6(HttpServletRequest request, HttpServletResponse response) throws IOException {
String name = request.getParameter("name");
String password = request.getParameter("password");
System.out.println(String.format("name=%s password=%s", name, password));
response.getWriter().write("OK");
}
GET {{host}}/user/login6?name=ijunfu&password=123456
8. 文件上传
Spring Boot 支持文件上传,通常使用 MultipartFile。
示例:
@GetMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) {
String filename = file.getOriginalFilename();
System.out.println(filename);
return "OK";
}
GET {{host}}/user/upload
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="example.txt"
Content-Type: text/plain
{ "author": "ijunfu", "mail": "ijunfu@163.com" }
------WebKitFormBoundary7MA4YWxkTrZu0gW--
9. 文件下载
可以通过设置响应头实现文件下载。
示例:
@GetMapping("/download")
public ResponseEntity<UrlResource> download() throws MalformedURLException {
UrlResource urlResource = new UrlResource("https://sf3-cdn-tos.toutiaostatic.com/img/user-avatar/caa4bd4f43a9131f8fcd4a85f0c5f87c~300x300.image");
return ResponseEntity
.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=user-avatar.jpg")
.body(urlResource);
}
GET {{host}}/user/download
猜你喜欢
- 2024-12-03 Yii::$app->request常用属性和方法
- 2024-12-03 查缺补漏:一文看懂HTTP请求流程,不信你还不会
- 2024-12-03 Mysql写入频繁,怎么破?这是我见过的最清晰的“神操作”
- 2024-12-03 “我将 AWS 的数据传输成本,降低了 99%!”
- 2024-12-03 必备 Python 库:Requests - 轻松完成 HTTP 请求
- 2024-12-03 免费获取韵达快递查询API的使用指南
- 2024-12-03 手撸了一个网络请求工具类,开发速度迅速提升了300%
- 2024-12-03 应用层协议HTTP和HTTPS,一篇文章学会
- 2024-12-03 HTTP客户端连接,选择HttpClient还是OkHttp?
- 2024-12-03 深入理解 HTTP 请求参数和响应参数
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)