【Spring】Controller层常用注解的介绍和使用

关于请求接收的注解的使用

在Spring框架中,@RequestParam@RequestBody@PathVariable@RequestPart是用于处理HTTP请求参数、请求体和路径变量的注解。这些注解可以帮助我们将客户端发送的数据映射到Java方法的参数上。下面我将逐一解释这些注解,并提供相应的示例代码。

1. @RequestParam

@RequestParam注解用于获取HTTP请求中的查询参数或表单数据。它通常用于处理GET请求或者表单提交。

示例代码:

java 复制代码
@RestController
@RequestMapping("/api")
public class MyController {

    @GetMapping("/greet")
    public String greet(@RequestParam String name) {
        return "Hello, " + name + "!";
    }
}

解释: 在这个例子中,当客户端请求/api/greet?name=John时,name参数的值会被绑定到方法的name参数中,返回的结果将是Hello, John!

2. @RequestBody

@RequestBody注解用于将HTTP请求的请求体(body)映射到Java对象。通常用于处理POST请求。

示例代码:

java 复制代码
@RestController
@RequestMapping("/api")
public class MyController {

    @PostMapping("/user")
    public String createUser(@RequestBody User user) {
        return "User created: " + user.getName();
    }
}

class User {
    private String name;
    private int age;

    // Getters and Setters
}

解释: 在这个例子中,当客户端向/api/user发送一个包含JSON格式的请求体时,Spring会自动将其转换为User对象。如果请求体为{"name": "Alice", "age": 30},返回的结果将是User created: Alice

3. @PathVariable

@PathVariable注解用于获取URL中的路径变量。它通常用于RESTful风格的URL。

示例代码:

java 复制代码
@RestController
@RequestMapping("/api")
public class MyController {

    @GetMapping("/users/{id}")
    public String getUserById(@PathVariable String id) {
        return "User ID: " + id;
    }
}

解释: 在这个例子中,当客户端请求/api/users/123时,id的值会被绑定到方法的id参数中,返回的结果将是User ID: 123

4. @RequestPart

@RequestPart注解用于处理multipart/form-data请求,特别是在文件上传时使用。它能够处理请求中的部分内容。

示例代码:

java 复制代码
@RestController
@RequestMapping("/api")
public class MyController {

    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public String handleFileUpload(@RequestPart("file") MultipartFile file, 
                                    @RequestPart("description") String description) {
        // 处理文件和描述
        return "Uploaded file: " + file.getOriginalFilename() + ", Description: " + description;
    }
}

解释: 在这个例子中,当客户端向/api/upload发送一个multipart请求时,file部分将被映射到MultipartFile对象,description部分将被映射到String对象。假设上传了一个名为example.txt的文件,描述为"My file",返回的结果将是Uploaded file: example.txt, Description: My file

总结

  • @RequestParam:用于处理查询参数和表单数据。
  • @RequestBody:用于处理JSON或XML格式的请求体,自动转换为Java对象。
  • @PathVariable:用于获取路径变量,非常适合RESTful URL。
  • @RequestPart:用于处理multipart请求,尤其是在文件上传时。

关于响应的注解的使用

在Spring框架中,@ResponseBody@CookieValue@SessionAttribute@RequestHeader是用于处理HTTP响应体、Cookies、Session属性和HTTP请求头的注解。以下是对这些注解的详细描述和示例代码。

1. @ResponseBody

@ResponseBody注解用于将控制器方法的返回值直接写入HTTP响应体中,而不是返回一个视图名字。通常用于RESTful APIs。

示例代码:

java 复制代码
@RestController
@RequestMapping("/api")
public class MyController {

    @GetMapping("/data")
    @ResponseBody
    public User getData() {
        return new User("Alice", 25);
    }
}

class User {
    private String name;
    private int age;

    // Constructor, Getters and Setters
}

解释: 在这个例子中,当客户端请求/api/data时,将直接返回一个User对象,并以JSON格式写入响应体。假设返回的内容为{"name": "Alice", "age": 25}

2. @CookieValue

@CookieValue注解用于从HTTP请求中获取指定名称的Cookie的值。

示例代码:

java 复制代码
@RestController
@RequestMapping("/api")
public class MyController {

    @GetMapping("/cookie")
    public String getCookieValue(@CookieValue(name = "sessionId", defaultValue = "defaultSession") String sessionId) {
        return "Session ID: " + sessionId;
    }
}

解释: 在这个例子中,当客户端请求/api/cookie时,Spring会尝试从请求中提取名为sessionId的Cookie。如果该Cookie存在,它的值会被赋给sessionId参数;如果不存在,将使用默认值defaultSession。返回结果将是Session ID: [值]

3. @SessionAttribute

@SessionAttribute用于在Spring MVC中访问Session中的属性,适用于HTTP会话管理。

示例代码:

java 复制代码
@Controller
@RequestMapping("/api")
@SessionAttributes("user")
public class MyController {

    @ModelAttribute("user")
    public User setUser() {
        return new User("Alice", 25);
    }

    @GetMapping("/session")
    public String getSessionUser(@SessionAttribute("user") User user) {
        return "User in session: " + user.getName();
    }
}

解释: 在这个例子中,@SessionAttributes("user")表示该控制器将使用名为user的Session属性。在getSessionUser方法中,通过@SessionAttribute注解可以获取到Session中的User对象。如果访问/api/session,返回的结果将是User in session: Alice

4. @RequestHeader

@RequestHeader注解用于从HTTP请求中获取指定名称的请求头的值。

示例代码:

java 复制代码
@RestController
@RequestMapping("/api")
public class MyController {

    @GetMapping("/header")
    public String getHeaderInfo(@RequestHeader("User-Agent") String userAgent) {
        return "User-Agent: " + userAgent;
    }
}

解释: 在这个例子中,当客户端请求/api/header时,Spring会提取请求中的User-Agent头并将其值绑定到userAgent参数。如果客户端的User-Agent是Mozilla/5.0,那么返回结果将是User-Agent: Mozilla/5.0

总结

  • @ResponseBody:用于将方法返回值作为响应体直接返回,适用于JSON等格式的API。
  • @CookieValue:用于获取HTTP请求中的Cookie的值。
  • @SessionAttribute:用于从HTTP会话中获取存储的属性值,适用于会话管理。
  • @RequestHeader:用于获取HTTP请求中的请求头的值。
相关推荐
九转成圣几秒前
Spring Boot 导出 Excel 最佳实践:从 POI 函数式封装到 EasyExcel 的“降维打击”
spring boot·后端·excel
好家伙VCC几秒前
# React发散创新:从状态管理到自定义Hook的极致实践与性能优化在现代前端开发
java·javascript·python·react.js·性能优化
liyi_hz20082 分钟前
O2OA(翱途) V10 升级说明(三)数据中心:精准查询·严谨权限·优质视图
后端·java-ee·开源软件
eLIN TECE4 分钟前
Redis重大版本整理(Redis2.6-Redis7.0)
java·数据库·redis
花千树-0107 分钟前
两行注解把企业 RPC 接口变成 AI 工具
java·rpc·langchain·react·function call·ai agent·mcp
迷藏4948 分钟前
**绿色AI:用Python构建节能型机器学习模型的实践与优化策略**在人工智能飞速发展的今天,模型训练和
java·人工智能·python·机器学习
刀法如飞9 分钟前
一款基于 NestJS 的 DDD 脚手架,开箱即用
javascript·后端·架构
juniperhan12 分钟前
Flink 系列第13篇:Flink 生产环境中的并行度与资源配置
java·大数据·数据仓库·分布式·flink
StackNoOverflow14 分钟前
SpringCloud 声明式服务调用 —— Feign 全面解析(入门 + 原理 + 优化)
后端·spring·spring cloud
Foreer黑爷15 分钟前
Spring MVC原理与源码:从请求到响应的全流程解析
java·spring·mvc