spring boot注解使用 教程,SpringBoot @JsonIgnoreProperties、@JsonIgnore、@JsonFormat注解的简单使用
spring boot注解使用 教程,SpringBoot @JsonIgnoreProperties、@JsonIgnore、@JsonFormat注解的简单使用详细介绍
本文目录一览: SpringBoot如何注解事务声明式事务
springboot的事务也主要分为两大类,
一是xml声明式事务,
二是注解事务,注解事务也可以实现类似声明式事务的方法,
springboot 之 xml事务
使用 @ImportResource("classpath:transaction.xml") 引入该xml的配置
springboot 注解事务
Transactional注解事务
注:需要在进行事物管理的方法上添加注解@Transactional,或者偷懒的话直接在类上面添加该注解
注解声明式事务
@Configurationpublic class TxConfigBeanName {@Autowiredprivate DataSourceTransactionManager transactionManager;// 创建事务通知@Bean(name = "txAdvice")public TransactionInterceptor getAdvisor() throws Exception {Properties properties = new Properties();properties.setProperty("get*", "PROPAGATION_REQUIRED,-Exception,readOnly");properties.setProperty("add*", "PROPAGATION_REQUIRED,-Exception,readOnly");properties.setProperty("save*", "PROPAGATION_REQUIRED,-Exception,readOnly");properties.setProperty("update*", "PROPAGATION_REQUIRED,-Exception,readOnly");properties.setProperty("delete*", "PROPAGATION_REQUIRED,-Exception,readOnly");TransactionInterceptor tsi = new TransactionInterceptor(transactionManager,properties);return tsi;}@Beanpublic BeanNameAutoProxyCreator txProxy() {BeanNameAutoProxyCreator creator = new BeanNameAutoProxyCreator();creator.setInterceptorNames("txAdvice");creator.setBeanNames("*Service", "*ServiceImpl");creator.setProxyTargetClass(true);return creator;}}
SpringBoot篇 - Controller中常用的注解简介
SpringBoot的Controller中经常会用到注解@Controller、@RestController、@RequestMapping、@RequestParam、@PathVariable、@RequestBody等,以下针对这些注解简单使用。
@Controller 定义了一个控制器类,它需要配合使用@RequestMapping 注解的方法才是真正处理请求的处理器。
使用此注解返回的不是Json数据,而是页面类数据。
例如:
先在pom.xml中添加依赖
然后在resources目录下新建templates目录,并且在templates目录下创建hello.html文件。
最后创建HelloController
启动服务,访问localhost:8080/test/hello,页面跳转到hello.html页面。
使用@RestController注解的方法表示一个控制器,返回json。原来返回一个json需要@Controller和@RequestBody配合使用。
例如:
启动服务,访问 http://localhost:8080/jdbc/select?memberNo=20211123146 ,返回:
@RequestMapping可以使用在类上,也可以使用在方法上。
而@GetMapping/@PostMapping 其实就是@RequestMapping和Get/Post的集合
@GetMapping(value = “hello”) 等价于@RequestMapping(value = “hello”, method = RequestMethod.GET)
@PostMapping(value = “hello”) 等价于@RequestMapping(value = “hello”, method = RequestMethod.POST )
@RequestParam用于获取查询参数。格式为:url?name=AAA
例如:
启动服务,访问 http://localhost:8080/jdbc/select?memberNo=20211123146 即可。
通过@PathVariable可以将URL中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中。即获取路径参数。格式为:url/{id}
例如:
启动服务,访问 http://localhost:8080/jdbc/select/20211123146 即可。
@RequestBody传递的需要是对象
示例1:
启动服务,使用postman访问 http://localhost:8080/jdbc/memberPost1 即可。查看控制台输出:
Member(memberId=5, shopId=9730231, memberNo=20211123146, mobile=13800, openId=#zssyd4U4J3p+czzXkwg+ZQ==)
示例2:
启动服务,使用postman访问 http://localhost:8080/jdbc/memberPost2 即可
示例3:不使用注解
启动服务,使用postman访问 http://localhost:8080/jdbc/memberPost3 ,并在postman的form-data中分别传入key-value
总结:
如果要在Controller层返回一个页面,用注解@Controller;如果让其作为一个接口,用@RestController
在GET请求中(@GetMapping),不能使用@RequestBody。
在POST请求(@PostMapping),可以使用@RequestBody和@RequestParam
@RequestParam注解接受的参数来源于url中,格式为xxx?username=aa&password=456,而@RequestBody注解接收的参数则是来自于requestBody中,即请求体中。
通过注解实现自定义Spring Boot Starter自动装配
以Spring boot 作为微服务开发的项目中会用到很多第三方,或者自建的一些依赖SDK,例如 分布式锁、文件管理、数据库连接、统一错误拦截等组件。为了达到通用的目的,都会创建自定义的spring boot stater 组件。以下介绍创建步骤:
一、创建Maven测试项目test-starter pom文件如下:
二、创建自动装配类TestServiceConfiguration.java
三、创建配置类TestServiceProperties.java
四、创建提供服务的接口TestService.java
五、创建TestService的实现类型TestServiceImpl.java
六、创建自定义注解@EnableTest
通过以上步骤就实现了自定义Spring boot starter test-spring-boot-starter 组件,下面创建测试项目去调用这个starter组件。
创建starter组件使用项目
一、创建maven测试项目test-service,pom文件如下
二、创建启动类Application.java
三、创建配置文件application.yml
四、创建测试类TestController.java
到这里整个自定义spring boot starter 创建就完成了,同时也依赖到项目中进行使用了。
项目代码:starter-test: 自定义starter组件
2) SpringBootApplication注解详解
@SpringbootConfiguration注解等同于以下下三个注解:
可以看到SpringBootConfiguration 等同于使用了@Configuration
@EnableAutoConfiguration会根据classpath以及定义的Bean来帮你加载你想要的bean。 可以通过spring.autoconfigure.exclude来排除掉不想自动加载的bean。 且Auto-configuration发生在自定义的bean都被注册好了之后。 另外最好将带有@EnableAutoConfiguration的类放在root package,这样就能扫描所有子包下面的类。 auto-configuration的bean大多数都是带有@ConditionalOnClass and @ConditionalOnMissingBean 注解的bean。
这个类实现了DeferredImportSelector被import进来,内部会调用getCandidateConfigurations()来加载所有的auto-configuration beans
从下面图中能看到SpringFactoriesLoader从spring.factory里找到207个auto-configuration的beans。
AutoConfigurationImportSelector核心功能就是获取spring.factories中EnableAutoConfiguration所对应的Configuration类列表,由@EnableAutoConfiguration注解中的exclude/excludeName参数筛选一遍,再由AutoConfigurationImportFilter类所有实例筛选一遍,得到最终的用于Import的configuration和exclusion。 该函数是被谁调用的呢?在org.springframework.context.annotation.ConfigurationClassParser类中被processImports()调用,而processImports()函数被doProcessConfigurationClass()调用。 关于ConfigurationClassParser 请参考 Spring Annotation IOC
指定扫描basePackages的路径,具体可以查看@Configuration的javadoc文档。
SpringBoot:如何书写一个自定义的Enable注解
1.新建自定义的注解
2.应用此注解到配置类
3.这时候需要在EnableCustomFeature 类中通过@Import的方式引入一系列需要前置处理的Bean类
上述通过@Import方式做的原因,主要是将@Import标记的配置类中的bean作为ApplicationContext处理
使用Selector选择器启用Enable 自定义注解
示例如下:
上述示例中,自定义的注解中有一个criteria自定义注解属性字段,默认值为default,后面我们需要做的就是根据criteria的值激活两种不同的bean功能集合:
所以如果criteria字段值为 "default",就会加载SomeBeanConfigurationDefault, 否则就是加载SomeBeanConfigurationType1。
参考链接: http://www.java-allandsundry.com/2015/04/spring-enable-annotation-writing-custom.html
SpringBoot @JsonIgnoreProperties、@JsonIgnore、@JsonFormat注解的简单使用
类上添加了@JsonIgnoreProperties(value = {"password"}) 注解,即忽略password字段,不会返回password
@JsonIgnore注解用来忽略某些字段,可以用在变量或者Getter方法上,用在Setter方法时,和变量效果一样。这个注解一般用在我们要忽略的字段上。
@JsonIgnoreProperties(ignoreUnknown = true),将这个注解写在类上之后,就会忽略类中不存在的字段。这个注解还可以指定要忽略的字段,例如@JsonIgnoreProperties({ “password”, “secretKey” })
@JsonFormat可以帮我们完成格式转换。例如对于Date类型字段,如果不适用JsonFormat默认在rest返回的是long,如果我们使用@JsonFormat(timezone = “GMT+8”, pattern = “yyyy-MM-dd HH:mm:ss”),就返回"2018-11-16 22:58:15"
comment、fullName、address属性被忽略了,regDate的格式进行转换
SpringBoot Starter自定义注解 - 接口加解密
目标
本章我们将编写一个starter,目标如下:
1、对外提供 @OpenAPI 注解,使用此注解它会对接收的请求数据进行解密,对要返回的数据进行加密。
2、完成服务端使用示例
3、完成前端调用示例
加密规则
1、对业务数据进行AES加密,示意代码:encryptData=AES("业务数据", aesKey)
2、对AES的key进行公钥加密,示意代码:encryptKey=RSA(aesKey, 公钥)
3、签名sign=md5(encryptData+encryptKey)
加密后请求示例
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
请求参数
服务端返回示例
pom.xml
定义注解
配置公私钥
具体代码逻辑
定义切面和自动装配
spring.factories
服务端修改
在业务项目中引入jar 包
配置公私钥
改动的地方很少,只需要在原接口增加@OpenAPI注解即可
前端修改
修改前代码
修改后要先对参数加密,然后对返回数据解密
安装两个加密库
封装RSA、AES和Base64加解密
Spring Boot 最核心的 25 个注解,都是干货!
Spring Boot 最核心的 25 个注解 1、@SpringBootApplication
这是 Spring Boot 最最最核心的注解,用在 Spring Boot 主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。
其实这个注解就是 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan 这三个注解的组合,也可以用这三个注解来代替 @SpringBootApplication 注解。
2、@EnableAutoConfiguration
允许 Spring Boot 自动配置注解,开启这个注解之后,Spring Boot 就能根据当前类路径下的包或者类来配置 Spring Bean。
如:当前类路径下有 Mybatis 这个 JAR 包,MybatisAutoConfiguration 注解就能根据相关参数来配置 Mybatis 的各个 Spring Bean。
3、@Configuration
这是 Spring 3.0 添加的一个注解,用来代替 applicationContext.xml 配置文件,所有这个配置文件里面能做到的事情都可以通过这个注解所在类来进行注册。
4、@SpringBootConfiguration
这个注解就是 @Configuration 注解的变体,只是用来修饰是 Spring Boot 配置而已,或者可利于 Spring Boot 后续的扩展。
5、@ComponentScan
这是 Spring 3.1 添加的一个注解,用来代替配置文件中的 component-scan 配置,开启组件扫描,即自动扫描包路径下的 @Component 注解进行注册 bean 实例到 context 中。
前面 5 个注解可以在这篇文章《Spring Boot 最核心的 3 个注解详解》中了解更多细节的。
6、@Conditional
这是 Spring 4.0 添加的新注解,用来标识一个 Spring Bean 或者 Configuration 配置文件,当满足指定的条件才开启配置。
7、@ConditionalOnBean
组合 @Conditional 注解,当容器中有指定的 Bean 才开启配置。
8、@ConditionalOnMissingBean
组合 @Conditional 注解,和 @ConditionalOnBean 注解相反,当容器中没有指定的 Bean 才开启配置。
9、@ConditionalOnClass
组合 @Conditional 注解,当容器中有指定的 Class 才开启配置。
10、@ConditionalOnMissingClass
组合 @Conditional 注解,和 @ConditionalOnMissingClass 注解相反,当容器中没有指定的 Class 才开启配置。
11、@ConditionalOnWebApplication
组合 @Conditional 注解,当前项目类型是 WEB 项目才开启配置。
当前项目有以下 3 种类型。
enum Type {
}
12、@ConditionalOnNotWebApplication
组合 @Conditional 注解,和 @ConditionalOnWebApplication 注解相反,当前项目类型不是 WEB 项目才开启配置。
13、@ConditionalOnProperty
组合 @Conditional 注解,当指定的属性有指定的值时才开启配置。
14、@ConditionalOnExpression
组合 @Conditional 注解,当 SpEL 表达式为 true 时才开启配置。
15、@ConditionalOnJava
组合 @Conditional 注解,当运行的 Java JVM 在指定的版本范围时才开启配置。
16、@ConditionalOnResource
组合 @Conditional 注解,当类路径下有指定的资源才开启配置。
17、@ConditionalOnJndi
组合 @Conditional 注解,当指定的 JNDI 存在时才开启配置。
18、@ConditionalOnCloudPlatform
组合 @Conditional 注解,当指定的云平台激活时才开启配置。
19、@ConditionalOnSingleCandidate
组合 @Conditional 注解,当指定的 class 在容器中只有一个 Bean,或者同时有多个但为首选时才开启配置。
20、@ConfigurationProperties
用来加载额外的配置(如 .properties 文件),可用在 @Configuration 注解类,或者 @Bean 注解方法上面。
21、@EnableConfigurationProperties
一般要配合 @ConfigurationProperties 注解使用,用来开启对 @ConfigurationProperties 注解配置 Bean 的支持。
22、@AutoConfigureAfter
用在自动配置类上面,表示该自动配置类需要在另外指定的自动配置类配置完之后。
如 Mybatis 的自动配置类,需要在数据源自动配置类之后。
23、@AutoConfigureBefore
这个和 @AutoConfigureAfter 注解使用相反,表示该自动配置类需要在另外指定的自动配置类配置之前。
24、@Import
这是 Spring 3.0 添加的新注解,用来导入一个或者多个 @Configuration 注解修饰的类,这在 Spring Boot 里面应用很多。
25、@ImportResource
这是 Spring 3.0 添加的新注解,用来导入一个或者多个 Spring 配置文件,这对 Spring Boot 兼容老项目非常有用,因为有些配置无法通过 Java Config 的形式来配置就只能用这个注解来导入。
欢迎Java工程师朋友们加入Java高并发: 957734884 ,群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!
SpringBoot Controller接收参数的几种常用注解方式
今日份鸡汤:一岁一礼,一寸欢喜,往后余生,积极向上的生活,热气腾腾的活着。
1、请求路径中带参数 使用 @PathVariable 获取路径参数。即url/{id}这种形式。 demo:
运行结果展示:
2、@RequestParam 获取查询参数。即url?name=这种形式,用于get/post。springboot默认情况就是它,类似不写注解 demo:
运行结果展示:
3、@RequestBody获取POST请求参数 demo:
运行结果展示:
4、请求头参数以及Cookie (1)@RequestHeader (2)@CookieValue demo: 方式一:
运行结果展示:
方式二:
运行结果展示: