SpringBoot接口注解+RESTful+常见注解参数

SpringBoot接口注解

一、常见注解

  1. @RestController: 用于标识一个类是RESTful风格的控制器,可以处理HTTP请求并返回RESTful响应。
  2. @RequestMapping: 用于定义HTTP请求的映射规则,包括URL路径、HTTP方法、请求参数等。
  3. @GetMapping@PostMapping@PutMapping@DeleteMapping等:分别用于定义GET、POST、PUT、DELETE等HTTP方法的映射规则。
  4. @RequestParam: 用于获取HTTP请求中的请求参数,并将其绑定到方法参数上。
  5. @PathVariable: 用于获取URL路径中的占位符值,并将其绑定到方法参数上。
  6. @RequestBody: 用于将HTTP请求体中的数据绑定到方法参数上,通常用于接收JSON、XML等格式的请求体。
  7. @ResponseBody: 用于将方法返回的数据转换为HTTP响应体,并发送给客户端(@RestController包含了@ResponseBody和@Controller)。

二、RESTful风格的控制器

1.)@RestController

在Spring Boot中,可以通过使用@RestController注解来创建RESTful风格的控制器。

特定如下:

1.它结合了@Controller@ResponseBody注解,不需要再为每个方法都添加@ResponseBody注解

2.默认返回JSON格式数据

3.支持多种HTTP方法:@RestController注解支持处理多种HTTP方法,如GET、POST、PUT、DELETE等,可以通过不同的方法来实现对资源的不同操作

使用@RestController注解的示例:

@RestController
public class UserController {
    
    @GetMapping("/users")
    public List<User> getUsers() {
        // 处理获取用户列表的逻辑
        // 返回用户列表数据
        return userService.getUsers();
    }
    
    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
        // 处理创建用户的逻辑
        // 返回创建的用户对象
        return userService.createUser(user);
    }
    
    @GetMapping("/users/{id}")
    public User getUserById(@PathVariable Long id) {
        // 处理根据用户ID获取用户的逻辑
        // 返回用户对象
        return userService.getUserById(id);
    }
    
    @PutMapping("/users/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        // 处理更新用户信息的逻辑
        // 返回更新后的用户对象
        return userService.updateUser(id, user);
    }
    
    @DeleteMapping("/users/{id}")
    public void deleteUser(@PathVariable Long id) {
        // 处理删除用户的逻辑
        userService.deleteUser(id);
    }
}

以上示例中,@RestController注解标识了一个RESTful风格的控制器,通过不同的HTTP方法(如GET、POST、PUT、DELETE)来处理用户资源的不同操作,并通过@RequestBody@PathVariable注解来获取请求参数和路径参数,通过方法的返回值来返回RESTful响应给客户端。

2)RequestMapping在类上

@RequestMapping是Spring Boot中用于定义HTTP请求映射的注解。

@RequestMapping注解应用在类上时,它用于定义该类中所有处理HTTP请求的方法的公共URL前缀。

以下是一个示例展示了类级别的@RequestMapping注解的用法:

@RestController
@RequestMapping("/api/users")
public class UserController {

    @GetMapping
    public List<User> getUsers() {
        // 处理获取用户列表的逻辑
        // 返回用户列表数据
        return userService.getUsers();
    }

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        // 处理根据用户ID获取用户的逻辑
        // 返回用户对象
        return userService.getUserById(id);
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        // 处理创建用户的逻辑
        // 返回创建的用户对象
        return userService.createUser(user);
    }

    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        // 处理更新用户信息的逻辑
        // 返回更新后的用户对象
        return userService.updateUser(id, user);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        // 处理删除用户的逻辑
        userService.deleteUser(id);
    }
}

在上面的示例中,@RequestMapping("/api/users")注解在UserController类上定义了一个URL前缀/api/users,它将添加到该类中所有处理HTTP请求的方法的URL映射上。例如,getUsers()方法的完整URL将变成/api/usersgetUserById(Long id)方法的完整URL将变成/api/users/{id},依此类推。这样,所有这些方法都共享相同的URL前缀,使得控制器类的代码更加简洁和可维护。

3)RequestMapping在方法上

RequestMapping注解在方法上主要是用于在Spring MVC,SpringBoot更多不采用该方法,这里拿出来用于对比在类上,了解即可。

以下是 @RequestMapping 在方法中的用法示例:

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

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String hello() {
        return "Hello World!";
    }

    @RequestMapping(value = "/greet", method = RequestMethod.GET)
    public String greet(@RequestParam("name") String name) {
        return "Hello, " + name + "!";
    }

    @RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
    public User getUser(@PathVariable("id") Long id) {
        // 根据 id 查询用户信息并返回
        // ...
    }

    @RequestMapping(value = "/user", method = RequestMethod.POST)
    public User createUser(@RequestBody User user) {
        // 创建新用户并返回用户信息
        // ...
    }

}

参数的详解

  • value 属性用于指定请求的 URL 路径,可以包含占位符 {} 表示路径参数,例如 /user/{id}
  • method 属性用于指定请求的 HTTP 方法,可以使用 RequestMethod 枚举值,例如 RequestMethod.GETRequestMethod.POST 等。
  • @RequestParam 注解用于获取请求中的查询参数,例如 name 参数。
  • @PathVariable 注解用于获取请求中的路径参数,例如 id 参数。
  • @RequestBody 注解用于将请求体中的 JSON 或 XML 数据绑定到方法参数,例如 user 参数。

4)@RequestParam

@RequestParam:用于获取请求中的查询参数。可以在方法参数上使用

例:

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

上面的例子中,@RequestParam("name") 表示从请求中获取名为 name 的查询参数,并将其值绑定到 name 方法参数上。

5)@PathVariable

@PathVariable: 用于获取请求中的路径参数。可以在方法参数上使用

例:

@GetMapping("/user/{id}")
public Long getUser(@PathVariable("id") Long id) {
	return id;
}

上面的例子中,@PathVariable("id") 表示从请求中获取名为 id 的路径参数,并将其值绑定到 id 方法参数上。

6)@RequestBody

@RequestBody: 用于将请求体中的 JSON、XML 等数据绑定到方法参数。可以在方法参数上使用 @RequestBody 注解

@PostMapping("/user")
public User createUser(@RequestBody User user) {
    // 创建新用户并返回用户信息
    // ...
}

上面的例子中,@RequestBody 表示从请求体中获取 JSON 或 XML 数据,并将其转换成 User 对象,然后绑定到 user 方法参数上。

7)不能用@RequestBody注解的情况

1.GET 请求:由于 GET 请求通常不包含请求体,因此在处理 GET 请求时,一般不使用 @RequestBody 注解,而是通过 URL 参数或查询参数来传递数据。

如果使用服务器会报错,一般采用@RequestParams或者@@PathVariable传递参数

例@RequestParams:

@GetMpping("/user")
public User getUser(@RequestParam("id") Long id) {
    // 根据 id 获取用户信息并返回
    // ...
}

2.文件上传:文件上传时使用@RequestBody会服务器异常,通常使用@RequestParam

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

3.表单提交:对于表单提交功能,通常也不使用 @RequestBody 注解,而是使用 @RequestParam 注解来接收表单中的字段值。

@PostMapping("/user")
public User createUser(@RequestParam("name") String name, @RequestParam("age") int age) {
    // 创建新用户并返回用户信息
    // ...
}


总之,@RequestBody可以说是简化了@RequestParam的使用,不用一个个去获取前端传来的参数,而是采用对象封装,后端直接get/set。但有些特殊情况无法使用时,就只能使用@RequestParam一个一个慢慢的从前端获取参数。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值