Spring中常见的注解收集

Spring中常见的注解收集

1.@ResponseBody

不管前端传来的方式是什么,如果要让后端的结果告知前端,并且是采用的json格式给前端,必须加上@ResponseBody注解,否则,前端接受不到结果,报404错。

2.@RequestBody

如果前端传给后端的是一个json格式的数据,后端接受,一定要加上@RequestBody,否则后端识别不了前端的json数据,会导致后端接受的所有参数值为null。

3.@RequestParam

前端给后端传数据是get或post方式,比如表单提交的多个数据,并不是json格式,当出现前端数据属性名和后端接受的数据属性名不一致时,使用@RequestParam注解取别名,使其成功映射。

4.@Controller

告诉spring框架,当前的@Controller下边的类是处理器(这里sping中处理器非常多,我们写的是后端控制器处理器),也就是我们日常写后端接口和前端对接的类。

5.@RestController

@RestController注解是@Controller注解和@ResponseBody注解的结合体,就是使用了该注解,后边后端返回给前端的数据是json格式,不用再加@ResponseBody注解,自动采用json格式给前端。

6.@PathVariable

Url路径参数注解@PathVariable一般用于restful风格传参的时候拿到路径参数,可以给路径参数取别名来保证前后端参数名不一致能成功映射。

7.@RequestPart

@RequestPart这个注解用在multipart/form-data表单提交请求的方法上。支持的请求方法的方式MultipartFile,属于Spring的MultipartResolver类。这个请求是通过http协议传输的。
与@RequestParam比较:@RequestParam也同样支持multipart/form-data请求。
他们最大的不同是,当请求方法的请求参数类型不再是String类型的时候,@RequestParam适用于name-valueString类型的请求域,@RequestPart适用于复杂的请求域(像JSON,XML)。

8.@RequestHeader

通过@RequestHeader注解拿到请求头的信息,比如想拿到内容的数据类型信息,使用@RequestHeader(name = “Content-Type”) String contentType就可获取。

9.@CookieValue

通过@CookieValue注解获取Cookie值,比如获取Cookie中sessionId信息,@CookieValue(name = “JSESSIONID”) String sessionId就可获取。

10.@ModelAttribute

在一个控制器(使用了@ControllerSpring组件)中,如果存在一到多个使用了@ModelAttribute的方法,这些方法总是在进入控制器方法(方法上有@RequestMapping相关注解)之前执行,并且执行顺序是由加载顺序决定的(具体的顺序是带参数的优先,并且按照方法首字母升序排序)。

11.@RequestMapping

@RequestMapping注解是@GetMapping,@PostMapping,@PutMapping,@DeleteMapping等注解的结合体,也就是@RequestMapping可以替代上边所有注解,而具体使用那个注解的功能需要根据当前方法的参数相关信息,比如,前端以get方式传来参数,这时就相当于@GetMapping注解。

12.@validated

用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。

使用举例:

@RequestMapping(value="/url.json",method= {RequestMethod.POST})
@ResponseBody
@Transactional
public Result<?> xxmethod( @RequestBody @Validated  XoPO xoPo)     
    throws ParseException, UnsupportedEncodingException {}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
    @data
public class XoPO{
    
    @validated
    private List<OrderPerson> personList;
    
    @NotNull
    @Size(max=32,message="code is null")
    private String code;

    @NotBlank
    @Size(max=32,message="product is null")
    private String product;
}

常用的检查类的注解类型

@AssertFalse 校验false
@AssertTrue 校验true
@DecimalMax(value=,inclusive=) 小于等于value,
inclusive=true,是小于等于
@DecimalMin(value=,inclusive=) 与上类似
@Max(value=) 小于等于value
@Min(value=) 大于等于value
@NotNull  检查Null
@Past  检查日期
@Pattern(regex=,flag=)  正则
@Size(min=, max=)  字符串,集合,map限制大小
@Validate 对po实体类进行校验

13.@Value

使用@Value注解可以拿到不是请求体中的数据源的数据,也就是说可以拿到上下文中已经加载和处理完成的环境属性值,比如拿到配置文件中的某个参数值,如文件上传,拿到配置文件中存储的路径信息。

14.@DateTimeFormat和@JsonFormat

这两个注解主要用于时间格式处理。

@DateTimeFormat注解配合@RequestBody的参数使用的时候,会发现抛出InvalidFormatException异常,提示转换失败,这是因为在处理此注解的时候,只支持Form表单提交(Content-Typex-www-form-urlencoded`)。

案例:

@PostMapping(value = "/date2")
public String date2(@RequestParam("name"="userId")String userId,
                    @RequestParam("name"="birthdayTime") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime birthdayTime,
                    @RequestParam("name"="graduationTime") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime graduationTime) {
    return "success";
}

//或者先在实体类中给定时间格式规则
@Data
public class UserDto2 {

    private String userId;
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime birthdayTime;
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime graduationTime;
}


@PostMapping(value = "/date2")
public String date2(UserDto2 userDto2) {
    log.info(userDto2.toString());
    return "success";
}

@JsonFormat注解可使用在Form表单或者JSON请求参数的场景,因此更推荐使用@JsonFormat注解,不过注意需要指定时区(timezone属性),可能出现时差。

案例:

@PostMapping(value = "/date2")
public String date2(@RequestBody UserDto2 userDto2) {
    log.info(userDto2.toString());
    return "success";
}

@Data
public class UserDto2 {

    private String userId;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime birthdayTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime graduationTime;
}

15.@Bean

@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。

SpringIOC 容器管理一个或者多个bean,这些bean都需要在@Configuration注解下进行创建,在一个方法上使用@Bean注解就表明这个方法需要交给Spring进行管理。

16.@AutoWire

@AutoWire注解的方法表示自动装配的类型,返回一个Autowire类型的枚举
Autowired 有两种 注入方式 by type 和by name , 默认使用的是byType的 方式 向Bean里面 注入 相应的Bean。
@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。

17.@Lazy

表明一个bean 是否延迟加载,可以作用在方法上,表示这个方法被延迟加载;可以作用在@Component (或者由@Component 作为原注解) 注释的类上,表明这个类中所有的bean 都被延迟加载。如果没有@Lazy注释,或者@Lazy 被设置为false,那么该bean 就会急切渴望被加载;

18.@Component

@Component注解标注一个类为Spring容器的Bean,(把普通pojo实例化到spring容器中,相当于配置文件中的

19.@Scope

ScopeDescriptionn
singleton默认单例的bean定义信息,对于每个IOC容器来说都是单例对象
prototypebean对象的定义为任意数量的对象实例
requestbean对象的定义为一次HTTP请求的生命周期,也就是说,每个HTTP请求都有自己的bean实例,它是在单个bean定义的后面创建的。仅仅在web-aware的上下文中有效
sessionbean对象的定义为一次HTTP会话的生命周期。仅仅在web-aware的上下文中有效
applicationbean对象的定义为WebSocket的生命周期内。仅仅在web-aware的上下文中有效
websocketbean对象的定义为WebSocket的生命周期内。仅仅在web-aware的上下文中有效

20.@Primary

  • 作用:指示当多个候选者有资格自动装配依赖项时,应优先考虑bean。
  • 与@Bean 一起使用,定义在方法上,方法级别的注解
  • 与@Component 一起使用,定义在类上,类级别的注解

案例:

@Configuration
public class AppConfigWithPrimary {

    @Bean
    public MyBean myBeanOne(){
        return new MyBean();
    }

    @Bean
    @Primary
    public MyBean myBeanTwo(){
        return new MyBean();
    }
}
//上面代码定义了两个bean ,其中myBeanTwo 由@Primary 进行标注,表示它首先会进行注册

21.@Configuration

@Configuration注解是环境配置注解,告诉spring当前的类是一个环境配置类

22.@Service

@Service注解表示 service服务层(注入dao)

23.@Repository

@Repository注解表示dao层持久层

24.@PostConstruct和@PreDestroy

作用:方法初始化和销毁

被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。

被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreDestroy修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。

加载的顺序:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rztiYS8E-1641530611951)(D:\typora_img_source\image-20220107121651751.png)]

案例:

//对象创建并赋值之后调用
@PostConstruct
public void init() { 
  System.out.println("对象创建并赋值之后调用...");
}

//容器移除对象之前
@PreDestroy
public void detory(){
	System.out.println("容器移除对象之前执行...");

25.@ComponentScan

@ComponentScan主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中

26.@CrossOrigin

当出现跨域问题,一般在Controller层的类上加@CrossOrigin跨域注解可以解决跨域。

27.@SpringBootTest和@RunWith(SpringRunner.class)和@Test

@SpringBootTest和@RunWith(SpringRunner.class)和@Test这三个注解都是单元测试注解,@RunWith(SpringRunner.class)注解告诉spring要加载配置文件,在容器中启动单元测试

28.@SpringBootApplication

@SpringBootApplication注解告诉spring这是一个项目启动入口类

上边的注解是我日常见到的注解,一些注解解释是借鉴的其他博主写的,后续会继续完善内容

参考:

深入理解spring注解之@ComponentScan注解 - 星朝 - 博客园 (cnblogs.com)

@Bean 注解全解析 - 程序员cxuan - 博客园 (cnblogs.com)

Spring注解之@validated的使用 - 山高我为峰 - 博客园 (cnblogs.com)

(50条消息) Spring 注解面面通 之 @RequestPart_键盘上流淌的日子-CSDN博客_requestpart注解

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值