RESTful API与Spring MVC注解结合详解

1、RESTful API

        RESTful API,全称为Representational State Transfer(表述性状态转移)的API,是现代Web服务中最为流行的架构风格之一。其核心思想是将网络中的资源抽象为一系列URL,客户端通过HTTP协议对这些URL进行访问和操作,从而实现资源的获取、创建、更新和删除等操作。

  • 使用HTTP协议中的方法(GET、POST、PUT、DELETE等)来表示对资源的操作。
  • 使用HTTP状态码来表示服务器的响应状态,如200表示成功,404表示未找到资源等。
  • 可以在响应中包含链接信息,以引导客户端进行下一步操作。
  • 支持版本控制,以便在接口发生变化时保持系统的稳定性和可维护性。
  • 提供过滤、分页和排序等功能,以便客户端能够根据自己的需求获取数据。

2、Spring MVC注解

        Spring MVC注解是Spring框架中用于简化Web层开发的一种机制。这些注解允许开发者以声明式的方式定义控制器的行为、处理请求参数、绑定请求数据以及指定响应格式等。

3、注解详情

1、@RestController

        作用:该注解是@Controller和@ResponseBody的组合(作用于类上),用于标识一个类是RESTful风格的控制器类。它的作用是将Controller类的所有方法返回的对象转换为JSON或XML格式的响应体,而不是跳转到View。

@Controller:用于标识一个类作为控制器(Controller),,负责处理 HTTP 请求并返回响应。

@ResponseBody:用来指示方法的返回值应该直接作为HTTP响应正文(Body)返回给客户端,而不是被解析为视图名或模板名。

        搭配:通常与@RequestMapping(或其子注解如@GetMapping、@PostMapping等)搭配使用,以定义处理HTTP请求的方法。

@RestController
@RequestMapping("/api")
public class MyController {
}
2、@RequestMapping

        作用:@RequestMapping是一个通用的映射注解,用于标识方法或类在何种请求下进行处理(一般与@RestController一起作用于类上)。其子注解分别对应HTTP协议中的GET、POST、PUT、DELETE、PATCH方法,用于实现资源的查询、增加、更新、删除和局部更新操作。

@RestController
@RequestMapping("/api")
public class MyController {}
3、@PathVariable与@GetMapping或@DeleteMapping的组合

        @GetMapping、@DeleteMapping与@PathVariable(获取路径参数)以实现基于URL路径的查询操作。路径变量通常是必需的,因为它们在URL中指定了资源的唯一标识。

//@PathVariable与@GetMapping的组合使用
// 从URL路径中提取ID,查询对应数据
@GetMapping("/users/{id}")
public String getUserById(@PathVariable("id") Long userId) {}

//@PathVariable与@DeleteMapping的组合使用
// 从URL路径中提取ID,删除用户
@DeleteMapping("/users/{id}")
public String deleteUserById(@PathVariable("id") Long userId) {}
4、@RequestParam与@GetMapping的组合

        @GetMapping与@RequestParam(获取查询参数)搭配使用,以实现基于查询参数的查询操作。

 // 处理搜索请求的控制器方法
    @GetMapping("/search")
    public String search(@RequestParam String keyword, @RequestParam(defaultValue = "1") int page) {}
//@RequestParam(defaultValue = "1") int page为page参数指定了默认值1
//当在@RequestParam注解中设置required=true(默认值)时,对应的查询参数是必需的。
5、@RequestBody与@PostMapping组合

        @PostMapping与@RequestBody(将请求体内容绑定到方法参数上)搭配使用,以处理POST请求中的JSON或XML数据。在处理POST、PUT和PATCH请求时,如果方法参数使用了@RequestBody注解,并且该参数是控制器方法所必需的,则请求体中必须包含相应的JSON或XML数据。并且前段需要设置了正确的 Content-Type 头部请求体位JSON(application/json)

@PostMapping("/users")
    public ResponseEntity createUser(@RequestBody User user) {}
//@RequestBody 通常与数据绑定和验证一起使用。你可以在 User 类上使用注解(如 @NotNull, @Size 等)来定义验证规则,Spring MVC 会在反序列化数据后自动进行验证。
6、@ModelAttribute与@GetMapping、@PutMapping注解搭配使用

       如果需要在GET、PUT、Delete请求中使用对象接收参数,可以使用@ModelAttribute注解。它也可以用于PUT和DELETE请求。

//与 @GetMapping 搭配使用
//通常,@GetMapping 用于读取数据,而不是修改数据,因此 @ModelAttribute 在 @GetMapping 方法中不常用于绑定请求体(因为 GET 请求没有请求体)。然而,@ModelAttribute 可以用于方法级别,以准备模型属性供视图层使用。
@Controller
public class UserController {
 
    // 使用 @ModelAttribute 准备模型属性
    @ModelAttribute("allUsers")
    public List populateUsers() {
        // 假设这里是从数据库获取用户列表
        return Arrays.asList(new User("john"), new User("jane"));
    }
 
    // @GetMapping 方法使用 @ModelAttribute 准备的属性
    @GetMapping("/users")
    public String listUsers(Model model) {
        // "allUsers" 属性已经由上面的 @ModelAttribute 方法添加到模型中
        return "userList"; // 返回视图名
    }
}
//在这个例子中,populateUsers 方法使用 @ModelAttribute 注解,它的返回值会被添加到每个请求处理的模型中,包括 /users GET 请求的处理。
//与 @PutMapping 搭配使用
//@PutMapping 通常用于更新资源。当与 @ModelAttribute 搭配使用时,@ModelAttribute 可以用于方法参数上,以将请求参数绑定到模型对象上。
@PutMapping("/users/{id}")
public ResponseEntity updateUser(@PathVariable Long id, @ModelAttribute User userDetails) {
    // 假设这里是从数据库获取用户,并根据 userDetails 更新用户信息
    User updatedUser = userService.updateUser(id, userDetails);
    return ResponseEntity.ok(updatedUser);
}
//在这个例子中,客户端发送一个 PUT 请求到 /users/{id},请求体中包含要更新的用户信息。Spring MVC 会自动将请求体中的 JSON(或其他格式)数据反序列化为 User 对象,并将其作为 userDetails 参数传递给 updateUser 方法。

你可能感兴趣的:(springmvc,restful,spring,mvc,java)