SpringBoot常用的简化开发注解

news/2024/12/28 1:15:21/

一、引言

在Spring Boot框架中,有许多常用的注解可用于开发项目。下面是其中一些常见的注解及其功能和属性的说明:

1、@RestController

@RestController 是 Spring Framework 中的一个注解,用于标识一个类是 RESTful 服务的控制器。它结合了 @Controller@ResponseBody 注解的功能,简化了创建 RESTful 服务的代码。

@RestController 的主要作用是将方法返回的对象直接转换为响应体,并通过适当的 HTTP 响应头来补充响应信息。这意味着在使用 @RestController 注解的类中,不需要显式地使用 @ResponseBody 来指定方法的返回值要作为响应体。

以下是 @RestController 注解的常用属性:

1、value指定控制器的 URL 路径。

2、produces指定控制器支持的响应媒体类型。

3、consumes指定控制器支持的请求媒体类型。

下面是一个使用 @RestController 注解的示例:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {@GetMapping("/users/{id}")public User getUserById(@PathVariable int id) {// 根据用户ID查询数据库或其他操作User user = userRepository.findById(id);return user;}
}

上述示例中,UserController 类被标记为 @RestController,表明它是一个 RESTful 服务的控制器。getUserById 方法使用 @GetMapping 注解来处理 GET 请求,并通过 @PathVariable 注解将 URL 中的参数映射到方法的参数中。方法返回一个 User 对象,Spring 将自动转换为 JSON 格式的响应体,并设置适当的 HTTP 响应头。

这样,当发送 GET 请求 /users/123 时,将会触发 getUserById 方法,根据 ID 查询用户信息并将其作为 JSON 数据返回给客户端。

2、@RequestMapping

@RequestMapping 注解是 Spring MVC 框架中用于将请求映射到控制器方法的注解。它可以被应用在类级别或方法级别。

1、当应用在类级别时,它指定了基本的请求路径,该路径会与控制器中的所有方法的请求路径进行匹配。

2、当应用在方法级别时,它指定了具体的请求路径,该路径会与该方法的请求进行匹配。

@RequestMapping 注解有多个属性可以配置:

1、value用于指定请求的路径,可以接受单个字符串值或字符串数组,支持 Ant 风格的路径模式(例如 /users/*)。

2、method用于指定请求的 HTTP 方法,可以接受一个或多个 RequestMethod 枚举值,默认为任意请求方法。

3、params用于指定请求的参数条件,可以接受一个或多个字符串表达式,支持简单的比较操作符(例如 param=value!param 等)。

4、headers用于指定请求的头部条件,可以接受一个或多个字符串表达式,支持简单的比较操作符(例如 header=value!header 等)。

5、consumes用于指定请求的内容类型,可以接受一个或多个字符串值,表示服务器可接受的 MIME 类型。

6、produces用于指定响应的内容类型,可以接受一个或多个字符串值,表示服务器可生成的 MIME 类型。

下面是一个使用 @RequestMapping 注解的示例代码:

@Controller
@RequestMapping("/api/users")
public class UserController {@RequestMapping(value = "/{id}", method = RequestMethod.GET)public ResponseEntity<User> getUserById(@PathVariable Long id) {// 根据用户ID查询用户信息User user = userService.getUserById(id);if (user != null) {return ResponseEntity.ok(user);} else {return ResponseEntity.notFound().build();}}@RequestMapping(value = "/create", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)public ResponseEntity<Void> createUser(@RequestBody User user) {// 创建新用户userService.createUser(user);return ResponseEntity.created(URI.create("/api/users/" + user.getId())).build();}
}

在上述代码中:

1、UserController 类上使用了 @RequestMapping("/api/users") 注解,表示该控制器处理以 /api/users 开头的请求。

2、getUserById 方法使用了 @RequestMapping(value = "/{id}", method = RequestMethod.GET) 注解,表示该方法处理以 /api/users/{id} 形式的 GET 请求。

3、createUser 方法使用了 @RequestMapping(value = "/create", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) 注解,表示该方法处理以 /api/users/create 形式的 POST 请求,并且只接受 JSON 类型的请求体。

通过使用 @RequestMapping 注解,我们可以轻松实现请求的映射和路由,使得控制器方法能够根据请求的路径、HTTP 方法、参数条件等进行精确匹配。

3、@GetMapping@PostMapping@PutMapping@DeleteMapping

@GetMapping、@PostMapping、@PutMapping、@DeleteMapping是Spring框架中用于处理HTTP请求的注解。它们可以分别对应GET、POST、PUT和DELETE请求方法。

这些注解可以用在控制器类或方法上,用于定义特定请求方法的处理逻辑。

以下是每个注解的用途和属性: 

@GetMapping:用于处理GET请求。

属性:

1、headers指定请求头的条件,可选。

2、params指定请求参数的条件,可选。

3、value指定URL路径或路径模式,可以包含占位符。

代码示例:

@RestController
@RequestMapping("/api")
public class MyController {@GetMapping("/hello")public String hello() {return "Hello, GET!";}
}

@PostMapping:用于处理POST请求。

属性同@GetMapping。

代码示例:

@RestController
@RequestMapping("/api")
public class MyController {@PostMapping("/hello")public String hello() {return "Hello, POST!";}
}

@PutMapping:用于处理PUT请求。

属性同@GetMapping。

代码示例:

@RestController
@RequestMapping("/api")
public class MyController {@PutMapping("/hello")public String hello() {return "Hello, PUT!";}
}

@DeleteMapping:用于处理DELETE请求。

属性同@GetMapping。

代码示例:

@RestController
@RequestMapping("/api")
public class MyController {@DeleteMapping("/hello")public String hello() {return "Hello, DELETE!";}
}

注意:上述代码示例中的@RestController@RequestMapping是其他常用的注解,用于定义REST风格的控制器类和路径映射。

通过使用这些HTTP方法对应的注解,我们可以方便地定义处理不同类型请求的方法,并根据请求的具体条件来匹配相应的方法。

4、@PathVariable

@PathVariable注解用于将URL中的变量值绑定到控制器方法的参数上。在Spring MVC中,可以使用该注解来获取RESTful风格的URL中的路径变量。

该注解有以下属性:

1、value指定URL路径中的变量名,可以使用占位符形式(例如,/user/{id})。

2、namevalue属性作用相同,用于指定URL路径中的变量名。

3、required:声明该变量是否是必需的,默认为true,若路径中没有该变量会抛出异常。

4、defaultValue指定当URL路径中的变量未提供时的默认值。

下面是一个示例代码:

@RestController
@RequestMapping("/users")
public class UserController {@GetMapping("/{id}")public User getUserById(@PathVariable("id") Long id) {// 根据用户ID查询用户信息,并返回return userService.getUserById(id);}@GetMapping("/{category}/{id}")public Product getProduct(@PathVariable String category, @PathVariable("id") int productId) {// 根据类别和产品ID获取相应产品信息,并返回return productService.getProduct(category, productId);}
}

在上述示例中,当客户端发送GET请求到"/users/123"时,getUserById方法的id参数将会被自动绑定为路径变量的值123。类似地,当客户端发送GET请求到"/users/books/456"时,getProduct方法的category参数将会被绑定为"books",productId参数将会被绑定为456。 

5、@RequestParam

@RequestParam注解是Spring框架中常用的注解之一,用于从请求参数中获取值并绑定到方法的参数上。它可以用于处理GET、POST等HTTP请求方法。

属性:

1、value指定要绑定的请求参数的名称。

2、required指定该参数是否是必需的,默认为true。如果设置为true,并且请求中没有提供该参数,则会返回400 Bad Request错误。

3、defaultValue指定该参数的默认值。当请求中未提供该参数时,将使用默认值。

下面是一个简单的示例代码,说明了如何在Spring MVC中使用@RequestParam注解:

@RestController
@RequestMapping("/example")
public class ExampleController {@GetMapping("/hello")public String sayHello(@RequestParam("name") String name) {return "Hello, " + name + "!";}
}

在上述示例中,我们定义了一个ExampleController,其中有一个GET请求的处理方法sayHello()。该方法使用@RequestParam注解来接收名为"name"的请求参数,并将其绑定到方法的name参数上。然后,它返回一个包含问候消息的字符串。

例如,如果我们向/example/hello?name=John发出GET请求,它将返回字符串"Hello, John!"作为响应。

这种方式可以方便地从请求中获取参数,并在方法内进行处理和使用。

6、@RequestBody

@RequestBody 注解用于将 HTTP 请求的请求体映射到方法的参数上。它可以用在 Spring MVC 和 Spring Boot 中的控制器方法中。

使用 @RequestBody 注解时,Spring 框架会自动将请求体中的数据转换成方法参数所需的对象类型,并将其传递给方法。

下面是一些常见的 @RequestBody 注解属性:

1、required: 指定是否必须提供请求体,默认值为 true。如果设置为 true,而实际请求中没有包含请求体,则会返回 400 BAD REQUEST 响应。如果设置为 false,而实际请求中没有包含请求体,则方法参数将被设置为 null

2、value / name: 指定请求体的名称,例如:@RequestBody("data") 或 @RequestBody(name = "data")

3、defaultValue: 指定当请求体为空时的默认值,例如:@RequestBody(defaultValue = "default")

以下是一个简单的示例代码,演示了如何使用 @RequestBody 注解:

@RestController
public class UserController {@PostMapping("/users")public ResponseEntity<String> createUser(@RequestBody User user) {// 处理接收到的用户数据// ...return ResponseEntity.ok("User created successfully");}
}public class User {private String username;private String password;// 构造函数、getter 和 setter 方法省略
}

在上述示例中,createUser 方法使用了 @PostMapping 注解表示它处理 POST 请求,并使用 @RequestBody 注解将请求体映射到 User 对象上。当请求到达 /users 路径时,Spring 框架会自动解析请求体,并将其转换为 User 对象,然后传递给 createUser 方法进行处理。

请注意,要使 @RequestBody 注解正常工作,需要确保在 Spring 配置文件中配置了正确的消息转换器(例如:MappingJackson2HttpMessageConverter)以支持请求体数据的转换。

7、@ResponseBody

@ResponseBody注解用于将方法的返回值直接作为HTTP响应体返回给客户端,而不是将其解析为视图页面。它可以用在控制器的方法上。

该注解的属性有以下几种:

1、value:指定要返回的媒体类型,如application/jsonapplication/xml等。默认情况下,根据请求的Accept头来确定响应的媒体类型。

2、produces:与value属性类似,用于指定要返回的媒体类型,但可以通过多个值进行选择。例如:produces = {"application/json", "application/xml"}

3、headers:指定响应的头信息。

下面是一个使用@ResponseBody注解的示例代码:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {@GetMapping("/hello")@ResponseBodypublic String sayHello() {return "Hello, world!";}
}

在上述代码中,@RestController注解表示这是一个REST风格的控制器,@GetMapping注解指定了处理GET请求的路径为"/hello"。@ResponseBody注解使得sayHello()方法的返回值直接作为响应体返回给客户端。

当客户端访问/hello路径时,将会得到一个包含字符串"Hello, world!"的响应体。

8、@Autowired

@Autowired注解是Spring框架提供的一个注解,用于自动装配(自动注入)Bean。它可以应用在构造方法、属性或者Setter方法上。

使用@Autowired注解,能够避免手动编写繁琐的依赖注入代码,让Spring容器自动根据类型进行依赖的注入。当使用@Autowired注解时,Spring会扫描容器中已经注册的Bean,并通过类型匹配来自动装配相关的依赖。

@Autowired注解有以下几个常用的属性:

1、required:该属性用于指定被注入的依赖是否是必须的,默认值为true。如果找不到匹配的Bean时,当required=true时,会抛出NoSuchBeanDefinitionException异常;当required=false时,会将属性设置为null。

2、qualifier:当存在多个符合依赖类型的Bean时,可以使用该属性指定需要注入的具体Bean的名称。使用@Qualifier("beanName")来指定Bean的名称。

3、value:该属性与qualifier属性功能相同,可以用来指定Bean的名称。

下面是一个简单的示例代码,演示了如何使用@Autowired注解进行依赖注入:

@Component
public class MyComponent {private AnotherComponent anotherComponent;@Autowiredpublic MyComponent(AnotherComponent anotherComponent) {this.anotherComponent = anotherComponent;}// 省略其他方法}

在上述代码中,MyComponent类通过构造方法注入AnotherComponent类的实例。使用@Autowired注解标记了构造方法,Spring会自动在容器中查找匹配的AnotherComponent类型的Bean,并将其注入到MyComponent的构造方法中。

需要注意的是,为了让Spring能够扫描和管理这些带有@Autowired注解的类,我们需要在配置文件中配置@ComponentScan注解,指定要扫描的包路径:

@Configuration
@ComponentScan("com.example")
public class AppConfig {// 配置其他Bean
}

以上就是@Autowired注解的用处、属性以及一个简单的示例代码。 

9、@Component

@Component 是 Spring 框架中最常见的注解之一。它用于将一个普通的 Java 类标识为 Spring 组件,使其能够被 Spring IoC(依赖注入)容器所管理。通过 @Component 注解,Spring 会自动扫描和加载这些组件,并创建它们的实例。

@Component 注解有几个属性可用于进一步配置组件:

1、value:指定组件的名称。如果没有显式指定,默认情况下将使用类名首字母小写的形式作为组件的名称。

2、scope:指定组件的作用域。默认值是单例模式(Singleton),在整个应用程序生命周期内只创建一个实例。其他可用的选项包括原型模式(Prototype),每次请求都会创建一个新实例;会话模式(Session),在同一会话期间只创建一个实例;请求模式(Request),在每次请求中创建一个新实例。

3、autowire:指定自动装配模式。默认情况下,Spring 不会自动装配该组件的依赖关系。可用的选项包括 byName、byType、constructor 和 no。其中,byName 会根据属性名称进行自动装配,byType 则会根据属性类型进行自动装配。

4、initMethod:指定在创建组件实例后要调用的初始化方法。可以是组件内的任何公共无参方法。

5、destroyMethod:指定在销毁组件实例前要调用的方法。可以是组件内的任何公共无参方法。

下面是一个使用 @Component 注解的示例代码:

import org.springframework.stereotype.Component;@Component
public class UserService {// 类的具体实现...
}

在上述示例中,UserService 类被标记为一个 Spring 组件,并将其作为一个可管理的 bean 注册到 Spring IoC 容器中。可以通过其他注解如 @Autowired@Resource 在其他组件中引用和使用此组件。 

10、@Configuration

@Configuration注解是Spring框架中的一个注解,用于标识一个类作为配置类。配置类通常用于定义和配置Spring应用程序中的Bean。

配置类是Spring Boot应用程序的关键组成部分之一,其目的是通过Java代码而不是XML文件来配置和管理应用程序的Bean。使用@Configuration注解标记的类可以包含一个或多个方法,这些方法在运行时将被Spring容器调用以创建Bean实例。

以下是@Configuration注解的一些常见属性:

1、proxyBeanMethods默认为true。该属性控制是否启用基于CGLIB的代理模式来保证依赖注入的工作。当为true时,Spring容器将生成代理对象来处理对Bean方法的调用。当为false时,Spring容器将返回原始的配置类实例,而不是代理对象。

2、value为配置类提供一个可选的名称。

下面是一个使用@Configuration注解的简单示例:

@Configuration
public class AppConfig {@Beanpublic UserServiceImpl userService() {return new UserServiceImpl();}@Beanpublic UserDAO userDAO() {return new UserDAOImpl();}
}

在上面的示例中,AppConfig类使用@Configuration注解进行标注,表明它是一个配置类。该类内部包含了两个带有@Bean注解的方法,这些方法负责创建和配置应用程序中的Bean。在运行时,Spring容器将根据这些方法的定义创建并管理相应的Bean实例。

正如上述代码所示,@Configuration注解的使用可以使我们通过Java代码轻松地配置和管理应用程序中的Bean,而无需显式地编写XML文件。

二、结尾

学习这些注解可以帮助你更轻松地开发基于Spring Boot的Web应用程序,处理HTTP请求和响应,进行依赖注入,以及创建可扩展的组件和配置。


http://www.ppmy.cn/news/1073783.html

相关文章

接口幂等性设计的最佳实现

一、什么是幂等 二、为什么需要幂等 三、接口超时了&#xff0c;到底如何处理&#xff1f; 四、如何设计幂等 全局的唯一性ID 幂等设计的基本流程 五、实现幂等的8种方案 selectinsert主键/唯一索引冲突 直接insert 主键/唯一索引冲突 状态机幂等 抽取防重表 token令牌 悲观锁…

Linux 安装mysql(ARM架构)

添加mysql用户组和mysql用户 安装依赖libaio yum install -y libaio* 下载Mysql wget https://obs.cn-north-4.myhuaweicloud.com/obs-mirror-ftp4/database/mysql-5.7.27-aarch64.tar.gz安装mysql 解压Mysql tar xvf mysql-5.7.27-aarch64.tar.gz -C /usr/local/ 重命名 …

SCI论文必备Latex使用技巧【随时更新】

\pi —— π \xi —— ξ \eta —— η \mu —— μ \rho —— ρ \phi —— ϕ \psi —— ψ \zeta —— ζ \beta —— β \delta —— δ \alpha —— α \theta —— θ \sigma —— σ \partial —— ∂ \gamma —— γ \epsilon —— ϵ \lambda —— λ \omega —— ω …

Java9-17新特性

文章目录 一、简介二、新特性接口私有方法&#xff08;JDK9&#xff09;String存储结构的变化&#xff08;JDK9&#xff09;快速创建只读集合&#xff08;JDK9、10&#xff09;文本块&#xff08;JDK13、14、15&#xff09;更直观的 NullPointerException 提示&#xff08;JDK1…

音视频 ffmpeg命令提取PCM数据

提取PCM ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f s16le 48000_2_s16le ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -sample_fmt s16 out_s16.wav ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -codec:a pcm_s16le out2_s16le.wav ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f…

近期嵌软线下笔试题记录

1、以下代码的输出结果是&#xff1f; #include <stdio.h> #include <string.h>int main() {int a,b,c,d;a 10;b a; //a先赋值给b,然后自增1c a; //a自增1后赋值给cd 10*a; //先进行运算然后a自增1printf("b,c,d:%d…

【Flutter】Flutter 使用 fluttertoast 实现显示 Toast 消息

【Flutter】Flutter 使用 fluttertoast 实现显示 Toast 消息 文章目录 一、前言二、安装和基础使用三、不同平台的支持情况四、如何自定义 Toast五、在实际业务中的应用六、完整的业务代码示例&#xff08;基于 Web 端&#xff09;七、总结 一、前言 在这篇文章中&#xff0c;…

Linux- 文件夹相关的常用指令

1. 统计文件夹下的文件数量 在 Linux 下&#xff0c;有几种方法可以统计文件夹下的文件数量&#xff1a; 使用 ls 和 wc 命令&#xff1a; 这种方式可以统计目录下的直接子文件&#xff08;不包括子目录里的文件&#xff09;。 ls -l <目录路径> | wc -l注意&#xff1a…