包含@Configuration、@EnableAutoConfiguration、@ComponentScan通常用在主类上;
这几个注解放在一起是因为功能基本一样的,都是将类注入到spring容器中,只不过它们使用的场景不同,被@Component,@Service,@Controller,@Repository注解标注的类,这些类会被纳入进spring容器中管理。
@ResponseBody可以作用在方法上或类上,表示该方法的返回结果直接写入 HTTP response body 中,而不会被解析为跳转路径,即不会经过视图解析器,返回什么数据即在页面输入什么数据。
测试如下
该注解是@Controller和@ResponseBody的结合体,一般用于类,作用等于在类上面添加了@ResponseBody和@Controller
这3个注解都是基于注解方式进行自动装配,在容器里面将查找到的bean返回,一般@AutoWired用得最多,@Qualifier则需要配合@AutoWired使用,@Resource则是可以通过名字进行自动装配
@AutoWired
@Qualifier
当有一个接口的多个实现类时,只用@AutoWired会报错,因为它有多个接口的实现类,不知道你要找哪一个,这个时候就需要在注入bean的时候起个名字,然后用@Qualifier注解指定哪一个bean(按照名字注入与装配),比如
@Autowired
@Qualifier("sayHello")
@Resource
该注解的使用相当于@AutoWired和@Qualifier配合使用的效果
这3个注解功能也是类似的,通过这3个注解来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,用在方法上,可以通过配置的url进行访问
@RequestMapping
发起get请求或者post请求都可以
@GetMapping
只能用get请求
@PostMapping
只能发起post请求
@Value
这里用yml配置文件进行演示,propres配置文件也是同样的效果,在application.yml配置文件里设置开发环境的的配置文件(dev),这样用@Value获取到的就是开发环境的配置文件的数据,切换成生产环境(pro)则获取到的是生产环境的数据
@ConfigurationProperties
该注解可以直接注入整个类的数据,作用于类
配置文件如下,这里使用pro环境
测试
@PropertySource
注意:@PropertySource不支持yml文件读取。
配置文件如下:people.properties
测试
当然@PropertySource还可以和@Value配合使用,即一个一个注入值。
@Configuration作用于类上面,表明这是一个配置类,@Bean产生一个Bean对象加入Spring IOC容器
注意:@Configuration标注在类上,相当于把该类作为spring的xml配置文件中,作用为:配置spring容器(应用上下文)
一般这两个注解同时配合使用,新建配置类,将User加入容器,并自定义生命周期
测试
这几个注解放在一起主要是经常在控制层用来接收参数的
@RequestParam
@RequestParam主要用于接收url?后面的参数,get或post请求,只要后面的url?有参数都可以获取到对应的参数
@RequestParam注解有几个比较重要的属性,required 表示是否必须,默认为 true,必须。defaultValue 可设置请求参数的默认值。value 为接收url的参数名(相当于key值)。
@GetMapping("/requestParam")
@ResponseBody
public Map requestParam(
UserDto userDto,//通过一个实体类来接收,字段名必须一致
@RequestParam(value = "id", required = false) String userId,
@RequestParam(value = "name", required = false) String userName,
@RequestParam(value = "pageIndex", required = true, defaultValue = "1") String pageIndex,
@RequestParam(value = "pageSize", required = true, defaultValue = "5") String pageSize) {
Map map = new HashMap<>();
map.put("userDto",userDto.toString());
map.put("id", userId);
map.put("name", userName);
map.put("pageIndex", pageIndex);
map.put("pageSize", pageSize);
return map;
}
运行
@PathVariable
该注解主要用于获取路径参数,像url/{id}/{name}这种形式的参数都可以,get获取post请求均可
示例代码如下:
@PostMapping("/pathVariable/{id}/{name}")
@ResponseBody
public Map pathVariable(
@PathVariable(name = "id") String userId,
@PathVariable(name = "name") String userName) {
Map map = new HashMap<>();
map.put("id", userId);
map.put("name", userName);
return map;
}
运行结果
@RequestBody
该注解用于获取请求体数据(body),get没有请求体,故而一般用于post请求
示例代码如下:
@PostMapping("/test01")
@ResponseBody
public UserDto test01(@RequestBody UserDto userDto) {
return userDto;
}
@PostMapping("/test02")
@ResponseBody
public String test02(@RequestBody String str) {
return str;
}
运行结果
注意,如果要传多个参数过去只能将其封装成一个类,如果是出现了多个@RequestBody注解访问的时候会报400错误,例如下面这种代码就是错误的
@PostMapping("/requestBody")
@ResponseBody
public Map requestBody(
@RequestBody(required = true) String id,
@RequestBody(required = true) String name,
@RequestBody(required = false) String sex,
@RequestBody(required = false) String age
){
Map map = new HashMap<>();
map.put("id","id");
map.put("name","name");
return map;
}
@RequestHeader
示例代码如下
@PostMapping("/requestHeader")
@ResponseBody
public String requestBody03(@RequestHeader(name = "Content-Type") String contentType){
return contentType;
}
运行结果
@CookieValue
由于postman模拟cookie本人不会弄,只能用别人的代码
@GetMapping("/demo3")
public void demo3(@RequestHeader(name = "myHeader") String myHeader,
@CookieValue(name = "myCookie") String myCookie) {
System.out.println("myHeader=" + myHeader);
System.out.println("myCookie=" + myCookie);
}
原文链接
链接: 菜鸟的springboot常用注解总结
@PostMapping("/getDetails") post请求 映射到接口 @RequestBody 用来接收HTTP请求体中参数
@GetMapping("/getDetails") get请求 映射到接口 @RequestParam 用来接收URL中的查询参数
@Api 用于对整个控制器类进行说明,可通过tags属性来描述该控制器的功能,方便在Swagger文档中进行分类显示。
@RestController 这表示这是一个RESTful风格的Controller 会自动将返回的数据转换为JSON格式
@RequestMapping 用于映射接口的根路径 例:http://127.0.0.1:8009/test/getDetails
@Resource 用于注入依赖实例
@ApiOperation 用于对接口方法 进行说明 可通过value属性来描述该方法的功能
@ApiImplicitParams 是一个包含多个@ApiImplicitParam的容器
@ApiImplicitParam 用于具体描述每个参数 通过"name"指定名 "value"来描述参数的含义 "require" 来标识参数是否必 "dataType" 来指定参数的数据类型
@Data 它可以自动生成类的常用方法,如 toString()、equals()、hashCode()、getter 和 setter 等方法。使用 @Data 注解可以简化代码,并避免手动编写这些常用方法
Swagger注解
@ApiModel 用于描述数据模型的信息
@ApiModelProperty 用于描述模型的属性信息。在这里,我们将 e_id 字段注解为一个属性,并指定了它的名称为 "id",描述为 "id",并标记为必需属性(required = true)
@Select 用于执行搜索操作的SQL操作
@Update 用于执行更新操作的SQL操作
@Insert 用于执行插入操作的SQL操作
@Delete 用于执行删除操作的SQL操作
@SelectProvider 允许使用自定义的 SQL 提供者类来动态生成 SQL 查询语句
@UpdateProvider 允许使用自定义的 SQL 提供者类来动态生成 SQL 查询语句
@InsertProvider 允许使用自定义的 SQL 提供者类来动态生成 SQL 查询语句
@Options 提供了一些选项,例如设置主键自增等
例子:
1. @Select("SELECT * FROM company WHERE name = #{name}")
List
2. @Update("UPDATE company SET name = #{name}, age = #{age}, address = #{address}, salary = #{salary} WHERE id = #{id}")
int update(Test test);
@Select:
用于标识一个方法是查询操作,该方法会执行一个 SQL 查询语句并返回结果。
@Select 注解中的 value 属性用于指定要执行的 SQL 查询语句。
#{name} 是一个参数占位符,表示查询语句中的一个参数,@Param("name") String name 表示方法的参数名为 name,并将方法中的 name 参数映射到 SQL 查询语句中的 #{name} 占位符上。
@Update:
用于标识一个方法是更新操作,该方法会执行一个 SQL 更新语句并返回更新影响的行数。
@Update 注解中的 value 属性用于指定要执行的 SQL 更新语句。
#{name}, #{age}, #{address}, #{salary}, #{id} 都是参数占位符,表示更新语句中的多个参数,这些参数分别对应了 Test 实体类中的字段,而在 update 方法的参数 Test test 中,这些字段会被映射到对应的参数占位符上。
1, @SpringBootApplication
包含@Configuration、@EnableAutoConfiguration、@ComponentScan通常用在主类上;
相关注解 说明
@ComponentScan 用来自动扫描被这些注解标识的类,最终生成ioc容器里的bean,默认扫描范围是@ComponentScan注解所在配置类包及子包的类
@SpringBootConfiguration 与@Configuration作用相同,都是用来声明当前类是一个配置类,这里表明是springboot主类使用的配置类
@EnableAutoConfiguration 是springboot实现自动化配置的核心注解,通过这个注解把spring应用所需的bean注入容器中
2.@Component、@Service、@Controller、@Repository都是将类注入到spring容器中,
@Component,@Service,@Controller,@Repository注解标注的类,这些类会被纳入进spring容器中管理。
注解 说明
@Repository 持久层(dao)注入spring容器
@Service 业务逻辑层(server)注入spring容器
@Controller 控制层(controller)注入spring容器
@Component 普通pojo注入spring容器
3.@ResponseBody可以作用在方法上或类上,表示该方法的返回结果直接写入 HTTP response body 中,而不会被解析为跳转路径,即不会经过视图解析器,返回什么数据即在页面输入什么数据。@ResponseBody的作用其实是将java对象转为json格式的数据。
4.@RestController
该注解是@Controller和@ResponseBody的结合体,一般用于类,作用等于在类上面添加了@ResponseBody和@Controller
5.@AutoWired、@Qualifier、@Resource
这3个注解都是基于注解方式进行自动装配,在容器里面将查找到的bean返回,一般@AutoWired用得最多,@Qualifier则需要配合@AutoWired使用,@Resource则是可以通过名字进行自动装配
5.1
5.2@Qualifier 当有一个接口的多个实现类时,只用@AutoWired会报错,因为它有多个接口的实现类,不知道你要找哪一个,这个时候就需要在注入bean的时候起个名字,然后用@Qualifier注解指定哪一个bean(按照名字注入与装配)
接口实现类1,bean注入并起名字
接口实现类2,bean注入并起名字
两个注解的配合使用实现bean的自动装配
5.3@Resource 该注解的使用相当于@AutoWired和@Qualifier配合使用的效果
Resource(name="sayHello")
private SayHello sayhello
6.@RequestMapping、@GetMapping、@PostMapping
注解 说明
@RequestMapping @RequestMapping(url),通过该注解就可以通过配置的url进行访问,方式可以是get或post请求,两种方式均可
@GetMapping @GetMapping(url) ,功能类似的,只是这个限定了只能是Get请求
@PostMapping @PostMapping(url),功能类似的,只是这个限定了只能是Post请求
7.@Value、@ConfigurationProperties、@PropertySource
注解 说明
@Value 用于获取bean的属性,一般用于读取配置文件的数据,作用在变量上
在yml配置文件设置数据变量 mag:dev-信息
读取在类内部 @Value(${msg}) prvite String msg;
@ConfigurationProperties 用于注入Bean属性,然后再通过当前Bean获取注入值,作用在类上
在yml配置文件设置数据变量 student:
name:信息
age:12
读取在类外部作用于整个类 @ConfigurationProperties(prefix="student")
public class Student{
String name;
String age; //类的字段名必须和配置文件的字段名一致
} //!! 要有getter 和 setter 方法才能注入成功
@PropertySource 用于指定要读取的配置文件,可以和@Value或@ConfigurationProperties配合使用
//PropertySource不支持yml文件读取
案例配置文件people.properties ==> people.name = 灰太狼 people.sex =男
@PropertySource(value={ "classpath: people.properties " },encoding="utf-8")
@ConfigurationProperties(prefix="people")
8.@Configuration、@Bean
@Configuration作用于类上面,表明这是一个配置类,@Bean产生一个Bean对象加入Spring IOC容器
//一般这两个注解同时配合使用
注解 说明
@Configuration 作用于类上表示这是一个配置类,可理解为用spring的时候xml里面的< beans>标签
@Bean 产生bean对象加入容器,作用于方法,可理解为用spring的时候xml里面的标签
9.@RequestParam、@RequestBody、@PathVariable、@RequestHeader、@CookieValue
注解 说明
@RequestParam 获取查询参数。即url?name=这种形式
@RequestParam主要用于接收url?后面的参数,get或post请求,只要后面的url?有参数都可以获取到对应的参数
@RequestParam注解有几个比较重要的属性,required 表示是否必须,默认为 true,必须。defaultValue 可设置请求参数的默认值。value 为接收url的参数名(相当于key值)。
@PathVariable 获取路径参数。即url/{id}这种形式。get获取post请求均可
@RequestParam 获取请求体数据(body),get没有请求体,,一般用于post获取参数 //果要传多个参数过去只能将其封装成一个类,如果是出现了多个@RequestBody注解访问的时候会报400错误
@RequestHeader 获取请求头的信息
例: public String requestBody03(@RequestHeader(name = 'Content-Type') String contentType){
return contentType;
}
@CookieValue 获取Cookie的信息
例:@GetMapping("/demo3")
public void demo3(@RequestHeader(name = "myHeader") String myHeader,
@CookieValue(name = "myCookie") String myCookie) {
System.out.println("myHeader=" + myHeader);
System.out.println("myCookie=" + myCookie);
}