网站首页 > 技术文章 正文
在构建现代 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-10-13 谈谈springboot 获取前端json数据几种方法
- 2024-10-13 在Spring Boot中如何获取到Request对象?
- 2024-10-13 SpringBoot:如何优雅地进行响应数据封装、异常处理
- 2024-10-13 SpringBoot实现接口防抖的几种方案,杜绝重复提交
- 2024-10-13 @PostMapping @GetMapping注解 postmapping注解接收参数
- 2024-10-13 如何在SpringBoot中动态过滤JSON响应正文
- 2024-10-13 WebSocket 集群解决方案 websocket500
- 2024-10-13 SpringBoot跨系统调用接口方案 springboot跨越设置
- 2024-10-13 SpringBoot如何优雅的进行参数校验(一)
- 2024-10-13 IntelliJ IDEA必装插件以及SpringBoot使用小技巧合集
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)