Spring Boot中的常用注解

网友投稿 519 2022-11-02


Spring Boot中的常用注解

@EqualsAndHashCode(callSuper = true)

避免子类在进行类型判断是出现错误。 ​

@JsonProperty(“”)

@JsonProperty注解主要用于实体类的属性上,作用可以简单的理解为在反序列化的时候给属性重命名序列化和反序列化 序列化:把Java对象转换为字节序列的过程。 反序列化:把字节序列恢复为Java对象的过程。 对象的序列化主要有两种用途: 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;(持久化对象) 在网络上传送对象的字节序列。(网络传输对象)Spring Boot 内置了jackson来完成JSON的序列化和反序列化操作。Jackson使用ObjectMapper类将POJO对象序列化成JSON字符串,也能将JSON字符串反序列化成POJO对象。 Jackson包含了很多注解,用来个性化序列化和反序列化操作,主要有如下注解

@JsonProperty,作用在属性上,用来为JSON Key指定一个别名。

@JsonIgnore,作用在属性上,用来忽略此属性。在json序列化时将对象中的一些属性忽略掉,标记在属性或者方法上,返回的json数据不包含该属性。

@JsonIgnoreProperties,忽略一组属性,作用于类上

@JsonFormat,用于日期格式化。

@JsonSerialize,指定一个实现类来自定义序列化。类必须实现JsonSerializer接口。

@Valid注解

@Valid 注解,表示我们对这个对象属性需要进行验证,

在实体类上

既然验证,那么就肯定会有验证结果,所以我们需要用一个东西来存放验证结果,做法也很简单,在参数直接添加一个BindingResult,具体如下

对应获取验证结果的代码如下:

@Value注解

@Value将外部配置文件的值动态注入到Bean中。配置文件主要有两类:

application.properties。application.properties在spring boot启动时默认加载此文件

将配置文件中的值注入进去

@Accessors(chain = true)

这个注解是来至于lombok里面的 只需要在实体类加上就可以开启链式编程了

@RequiredArgsConstructor

在我们写controller或者Service层的时候,需要注入很多的mapper接口或者另外的service接口,这时候就会写很多的@AutoWired注解,代码看起来很乱 lombok提供了一个注解:@RequiredArgsConstructor就不用写@AutoWired注解的方式

@Mapper注解

扫描项目中的Dao层,将dao接口类注入到Spring,能够让其他类进行引用;

@MapperScan

扫描项目中的Dao层,将dao接口类注入到Spring,能够让其他类进行引用;

可以指定要扫描的dao接口类的路径,可以在启动类中添加此注解,可替代@Mapper注解(此模块内dao接口类不用都添加@Mapper注解)

@MapperScan("com.demo.mapper"):扫描指定包中的接口

@EnableCaching

开启基于注解的缓存 是spring framework中的注解驱动的缓存管理功能。 结合相应的注解后,会实现只查询了一次数据库,缓存效果达到。

@PathVariable(路径参数)

@GetMapping("/user/{userId}") public User selectUserByUserId(@PathVariable("userId") Integer userId){ User user = userService.selectUserByUserId(userId); return user; }

@ConfigurationProperties注解

只要在bean上添加上这个注解,指定好配置文件的前缀,那么对应的配置文件数据就会自动填充到bean中。举个栗子,现在有如下配置: 配置文件myconfig

myconfig.name=testmyconfig.age=22myconfig.desc=这是我的测试描述

添加对应的配置类,并添加上注解@ConfigurationProperties,指定前缀为myconfig

@Component@ConfigurationProperties(prefix = "myconfig")public class MyConfig {private String name;private Integer age;private String desc; //get/set 略 @Overridepublic String toString() { return "MyConfig [name=" + name + ", age=" + age + ", desc=" + desc + "]";}}

测试

public static void main(String[] args) throws Exception { SpringApplication springApplication = new SpringApplication(Application.class); // 非web环境 springApplication.setWebEnvironment(false); ConfigurableApplicationContext application = springApplication.run(args); MyConfig config = application.getBean(MyConfig.class); log.info(config.toString()); application.close();}

可以看到输出log

com.cml.chat.lesson.lesson3.Application - MyConfig [name=test, age=22, desc=这是我的测试描述]

@Bean注解

@Bean表示方法产生一个由Spring管理的bean,属性的名称语义与Spring XML中的 标签配置的一样。 使用例子 作用在方法上

public class DataSource { private String url; private String userId; private String password; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "DataSource{" + "url='" + url + '\'' + ", userId='" + userId + '\'' + ", password='" + password + '\'' + '}'; }}

@Configurationpublic class DataBaseConfig { @Bean("dataSource") public DataSource getDataSource(){ DataSource dataSource = new DataSource(); dataSource.setUserId("jingsi"); dataSource.setPassword("123456"); dataSource.setUrl(" return dataSource; }}

@Component注解

@Component这个注解说把这个类交给Spring管理 在持久层、业务层和控制层中,分别采用@Repository、@Service和@Controller

@ResponseBody注解

@ResponseBody并不是以json返回。不加@ResponseBody,是将方法返回的值作为视图名称,并自动匹配视图去显示,而加上@ResponseBody就仅仅是将方法返回值当作内容直接返回到客户端,并且会自适应响应头的content-type,返回的字符串符合json,那么content-type就是application/json,如果是普通字符串,就是text/plain,但是加上注解属性produces=application/json,那么不管内容是什么格式,响应头的content-type就一直是application/json,不再去做自适应,至于内容是不是json都不重要了

@RequestParam(查询参数)

适应于key-value类型 作用: 把请求中指定名称的参数给控制器中的形参赋值。 属性: value: 请求参数中的名称。 required:请求参数中是否必须提供此参数。 默认值: true。表示必须提供,如果不提供将报错

public String useRequestParam(@RequestParam("name")String username, @RequestParam(value="age",required=false)Integer age){ System.out.println(username+","+age); return "success";}

@RequestBody

这个适应于对象,json,list等类型

postman测试结果

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);而最常用的使用请求体传参的无疑是POST请求了,所以使用**@RequestBody接收数据时,一般都用POST方式进行提交**。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。

注:一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam。 注:当同时使用@RequestParam()和@RequestBody时,@RequestParam()指定的参数可以是普通元素、 数组、集合、对象等等(即:当,@RequestBody 与@RequestParam()可以同时使用时,原SpringMVC接收 参数的机制不变,只不过RequestBody 接收的是请求体里面的数据;而RequestParam接收的是key-value 里面的参数,所以它会被切面进行处理从而可以用普通元素、数组、集合、对象等接收)。 即:如果参数时放在请求体中,application/json传入后台的话,那么后台要用@RequestBody才能接收到; 如果不是放在请求体中的话,那么后台接收前台传过来的参数时,要用@RequestParam来接收,或 则形参前 什么也不写也能接收 参考:​​​@RequestBody的使用​​

@Data注解

不用再手动添加get/set等方法了,大大提高了写代码的速度。

1、在idea中直接在plugins下载lombok 2、重启编辑器 3、在pom.xml添加maven依赖

org.projectlombok lombok 1.16.10

@ControllerAdvice

是@Controller注解的一个增强,这个注解是Spring里面的东西,可以处理全局异常。当然在Spring Boot中也可以使用,但是Spring Boot中有它全自动化配置的异常处理,因为是全自动化的,因此也可以自己定制,比如定制它的异常页面,异常信息提示,异常视图。这里的话主要看一下,这个注解怎么用。它主要有一下几个功能:

处理全局异常 预设全局数据 请求参数预处理

@Async

在启动类上加上@EnableAsync注解,即可使得@Async注解生效。

@Transactional


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:linux---------vi编译器
下一篇:java实现斗地主小案例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~