【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请求中的请求头的值。
相关推荐
猪猪拆迁队33 分钟前
虚拟工厂仿真引擎的架构设计:让一条产线可编程、可观测、可干预
后端·ai编程
字节跳动数据库1 小时前
文章分享——相似函数处理方法
人工智能·后端·程序员
云技纵横1 小时前
@Transactional 失效的 7 种场景:第 5 种最难排查
后端
用户6757049885021 小时前
你知道 Go 结构体和结构体指针调用的区别吗?一文带你彻底搞懂!
后端·go
程序员cxuan2 小时前
读懂 Claude Code 架构分析系列,第一篇,开始!
人工智能·后端·架构
用户6757049885022 小时前
面试官问“装饰器模式”,这样回答薪资多要 3000!
后端
tntxia2 小时前
Geo Scene域名修改引起的一些问题
后端
用户298698530142 小时前
Java 实现 Word 文档加密与权限解除
java·后端
vanuan2 小时前
给你的A2A-Agent加把锁-认证鉴权实战指南
后端
Yeats_Liao2 小时前
14:Servlet中的页面跳转-Java Web
java·后端·架构