处理http请求的注解

@RequestMapping

@RequestMapping 是 Spring Framework 中用于处理 HTTP 请求的一个非常重要的注解。它可以应用于类或方法,定义请求的 URL 路径、请求方法、请求参数等信息。

1. 用法

  • 类级别: 当在类上使用时,定义了类的所有方法的公共前缀路径。
  • 方法级别: 当在方法上使用时,定义了该方法处理的具体路径和请求方式。

2. 主要属性

  • value: 定义请求的 URL 路径,可以是单个路径或路径数组。
  • method: 指定处理的 HTTP 请求方法,如 GETPOSTPUTDELETE 等。
  • params: 定义请求参数条件,只有当请求中包含指定参数时,才会调用该方法。
  • headers: 定义请求头条件,只有当请求中包含指定头信息时,才会调用该方法。
  • produces: 指定方法返回的媒体类型(Content-Type),如 application/jsontext/html

3. 示例

类级别的 @RequestMapping

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api") // 所有方法的公共前缀
public class MyController {

    @GetMapping("/users") // 处理 GET 请求 /api/users
    public List<User> getUsers() {
        // 返回用户列表
    }

    @PostMapping("/users") // 处理 POST 请求 /api/users
    public void createUser(@RequestBody User user) {
        // 创建新用户
    }
}

方法级别的 @RequestMapping

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api") // 类级别的公共前缀
public class MyController {

    @RequestMapping(value = "/users/{id}", method = RequestMethod.GET) // 处理 GET 请求 /api/users/{id}
    public User getUserById(@PathVariable Integer id) {
        // 根据 ID 获取用户
    }

    @RequestMapping(value = "/users", method = RequestMethod.PUT) // 处理 PUT 请求 /api/users
    public void updateUser(@RequestBody User user) {
        // 更新用户信息
    }
}

4. 小结

  • @RequestMapping 是一个灵活的注解,可以用于处理各种类型的 HTTP 请求。
  • 它允许你定义 URL 路径、HTTP 方法、请求参数和头信息等条件,提供了丰富的配置选项。
  • 在 Spring 4.3 之后,常用的 HTTP 方法(如 GETPOSTPUTDELETE)也提供了更简洁的注解,如 @GetMapping@PostMapping 等。

@GetMapping、@PostMapping

@GetMapping@PostMapping 是 Spring Framework 中的两个注解,用于简化处理 HTTP GET 和 POST 请求的操作。

它们是 @RequestMapping 注解的特定变体,专门用于这两种常用的请求方法。

@GetMapping

  • 用途: 用于处理 HTTP GET 请求。GET 请求通常用于从服务器获取数据。
  • 用法: 可以在控制器的方法上使用 @GetMapping,并指定 URL 路径。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @GetMapping("/users") // 处理 GET 请求 /users
    public List<User> getUsers() {
        // 返回用户列表
        return userService.getAllUsers();
    }

    @GetMapping("/users/{id}") // 处理 GET 请求 /users/{id}
    public User getUserById(@PathVariable Integer id) {
        // 根据 ID 返回用户信息
        return userService.getUserById(id);
    }
}

@PostMapping

  • 用途: 用于处理 HTTP POST 请求。POST 请求通常用于向服务器发送数据以创建新的资源。
  • 用法: 你可以在控制器的方法上使用 @PostMapping,并指定 URL 路径。
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @PostMapping("/users") // 处理 POST 请求 /users
    public void createUser(@RequestBody User user) {
        // 创建新用户
        userService.createUser(user);
    }
}

拓展 @ResponseBodyRequestBody

发现这里用了一个@RequestBody 和前面提到的 RequestBody 有点像

前面得知 RestControllerControllerresponseBody 的组合 而不是requestbody 貌似responsebodyrequestbody又是一对共轭的操作 responsebody 将网页的json数据转变为java能处理的类对象数据 requestbody将java函数返回的数据 转换成json一类的数据 让前端浏览器能够处理

@RestController

  • 定义: @RestController 是一个组合注解,它结合了 @Controller@ResponseBody
  • 作用: 用于标识一个控制器类,这个类主要用于处理 RESTful API 的请求。它自动将返回值序列化为 JSON 格式,并写入 HTTP 响应体。

@ResponseBody

  • 定义: @ResponseBody 用于指示 Spring 将控制器方法的返回值直接写入 HTTP 响应体。
  • 作用: 当你在方法上使用 @ResponseBody,Spring 会将返回的对象(如 Java 对象)自动转换为 JSON,并返回给客户端。@RestController 中的所有方法默认都应用了这个功能。

@RequestBody

  • 定义: @RequestBody 用于指示 Spring 将 HTTP 请求体中的内容转换为 Java 对象。
  • 作用: 当你在方法参数上使用 @RequestBody,Spring 会将请求体中的 JSON 数据解析为相应的 Java 对象。通常用于处理客户端发送的请求数据,比如创建新用户时传送的用户信息。

关系总结

  • 请求处理:
    • @RequestBody: 从 HTTP 请求体中读取数据,将其解析为 Java 对象,供后端逻辑使用。
  • 响应处理:
    • @ResponseBody (通过 @RestController 实现): 将 Java 对象转换为 JSON,并写入 HTTP 响应体,返回给前端。
@RestController
public class UserController {

    // 处理 POST 请求,使用 @RequestBody 将 JSON 转换为 User 对象
    @PostMapping("/users")
    public void createUser(@RequestBody User user) {
        // 使用 User 对象执行创建逻辑
        userService.createUser(user);
    }

    // 处理 GET 请求,返回 User 对象
    @GetMapping("/users/{id}")
    public User getUserById(@PathVariable Integer id) {
        User user = userService.getUserById(id);
        return user; // 自动转换为 JSON
    }
}

貌似使用@RestController 、@GetMapper 、@PostMapper、@RequestBody就可以基本上处理好http的请求和post请求了

另外还有些常用的关于处理http请求的注解

Other

1. 其他 HTTP 方法的注解

  • @PutMapping: 用于处理 HTTP PUT 请求,通常用于更新现有资源。
@PutMapping("/users/{id}")

public void updateUser(@PathVariable Integer id, @RequestBody User user) {

    userService.updateUser(id, user);

}
  • @DeleteMapping: 用于处理 HTTP DELETE 请求,通常用于删除资源。
@DeleteMapping("/users/{id}")

public void deleteUser(@PathVariable Integer id) {

    userService.deleteUser(id);

}

2. 请求参数和路径变量

  • @RequestParam: 用于获取 URL 查询参数。

    @GetMapping("/users")
    
    public List<User> getUsers(@RequestParam(required = false) String username) {
    
        return userService.getUsersByUsername(username);
    
    }
    
  • @PathVariable: 用于获取 URL 路径中的变量。

@GetMapping("/users/{id}")

public User getUserById(@PathVariable Integer id) {

    return userService.getUserById(id);

}

3. 请求头

  • @RequestHeader: 用于获取请求头中的信息。

    @GetMapping("/users")
    
    public List<User> getUsers(@RequestHeader("Authorization") String authToken) {
    
        // 处理 Authorization 头
    
    }
    

4. 响应处理

  • @ResponseStatus: 用于设置响应的状态码。
@PostMapping("/users")

@ResponseStatus(HttpStatus.CREATED)

public void createUser(@RequestBody User user) {

    userService.createUser(user);

}

5. 处理异常

  • @ExceptionHandler: 用于定义处理特定异常的方法,可以在控制器内部或全局控制器上使用。
@ExceptionHandler(UserNotFoundException.class)

public ResponseEntity<String> handleUserNotFound(UserNotFoundException ex) {

    return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());

}

6. 跨域资源共享(CORS)

  • @CrossOrigin: 用于处理跨域请求,允许指定的域名访问你的 API。
@CrossOrigin(origins = "http://example.com")

@GetMapping("/users")

public List<User> getUsers() {

    return userService.getAllUsers();

}

7. 文件上传

  • @RequestParam: 可以用于处理文件上传。

    @PostMapping("/upload")
    
    public void uploadFile(@RequestParam("file") MultipartFile file) {
    
        // 处理文件上传
    
    }
    

项目分区导航加密原理 ⬅️ | 06-处理http请求的注解 | ➡️ 新涉及到的注解 @Override @Autowired