Spring注解
单纯的Spring框架下,使用注解需要将其开启注解支持,在xml文件下添加如下标签
<context:component-scan base-package="xxx.xxx.**"></context:component-scan>
<context:annotation-config/>
给容器中注入组件
包扫描+组件标注注解
@Component
- 把普通
pojo
实例化到spring容器中,相当于配置文件中的<bean/>
标签 - 作用在类上
Bean
名称默认为当前类的类名,首字母小写value
参数可指定Bean
名称@Controller
、@Service
、@Repository
都可以称为@Component
,特性并于其一致
@Component、@Controller、@Service、@Repository
- 表明当前类需要创建对象并且存入spring的ioc容器中
- 在实例化时,首选默认无参构造函数。
- 支持带参构造,前提是构造函数的参数依赖必须要有值,否则抛异常。
- 在MVC开发中:@Controller在控制层使用,@Service在服务层使用,@Repository在持久层使用。
value
:用于指定存入容器时bean的id。当不指定时,默认值为当前类的名称首字母小写。
@Bean
- 表示把当前方法的返回值存入spring的ioc容器
-
- 作用在方法上
@Bean
通常出现在Spring的配置类当中,注解在方法上, 也可以出现在注解上,作为元注解来使用- 参数解释
value
:用于指定存入spring容器中bean的标识。支持指定多个标识。当不指定该属性时,默认值是当前方法的名称。name
:同value作用一样autowireCandidate
:用于指定是否支持自动按类型注入到其他bean
中。只影响@Autowired
注解的使用。不影响@Resource
注解注入。默认值为true,意为允许使用自动按类型注入。initMethod
:指定Bean的初始化方法destroyMethod
:指定Bean的销毁方法- 支持别名:
@Bean(“xx-name”)
@Import
- 引入其他的配置类
- 作用在类上
- 通常都是和注解驱动的配置类一起使用。
- 使用此注解之后,可以使我们的注解驱动开发和早期xml配置一样,分别配置不同的内容,使配置更加清晰、被引入的类上可以不再使用
@Configuration,@Component
等注解。 - 以下为通常情况可以使用
@Import
注解导入的三种类- 导入
@Configuration
注解的配置类; - 导入
ImportSelector
的实现类; - 导入
ImportBeanDefinitionRegistrar
的实现类;
- 导入
- 如果需要导入其他类或者导入
xml
更推荐使用@ImportResource
- 使用示例
@SpringBootApplication @Import({SmsConfig.class}) public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
注入bean的注解
@Autowired
- 自动按照类型注入
required
:是否必须注入成功。默认值是true,表示必须注入成功。当取值为true的时候,注入不成功会报错。- 当
IOC容器
中有且只有一个类型匹配时可以直接注入成功。 - 当有超过一个匹配时,则使用变量名称(写在方法上就是方法名称)作为bean的id,在符合类型的bean中再次匹配,能匹配上就可以注入成功。
@Resource
- 找到依赖的组件注入到应用中来
- 此注解来源于JSR-250规范(Java Specification Requests),它利用了JNDI(Java Naming and Directory Interface Java命名目录接口 J2EE规范之一)技术查找所需的资源。
- 装配方式:
- 按照byType的方式装配bean对象(默认)
- 指定了name,没有指定type,采用byName
- 没有指定name,指定了type,按照byType装配bean对象
- byName和byType都指定,都会校验,有任何一个不符合条件就会报错
- 参数:
- name:资源的JNDI名称。在spring的注入时,指定bean的唯一标识。
- type:指定bean的类型。
- lookup:引用指向的资源的名称。它可以使用全局JNDI名称链接到任何兼容的资源。
- authenticationType:指定资源的身份验证类型。它只能为任何受支持类型的连接工厂的资源指定此选项,而不能为其他类型的资源指定此选项。
- shareable:指定此资源是否可以在此组件和其他组件之间共享。
- mappedName:指定资源的映射名称。
- description:指定资源的描述。
- 简单理解可以把@Resource当作@Autowired和@Qualifier的合体版。
@Inject
- 用于建立依赖关系的。和
@Resource
和@Autowired
的作用是一样。 - 在使用之前需要先导入坐标:
@Target({ METHOD, CONSTRUCTOR, FIELD }) @Retention(RUNTIME) @Documented public @interface Inject { }
<!-- https://mvnrepository.com/artifact/javax.inject/javax.inject --> <dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> <version>1</version> </dependency>
@Inject
来源于`JSR-330规范。(JSR330是Jcp给出的官方标准反向依赖注入规范。)- 不支持任何属性,但是可以配合
@Qualifier
或者@Primary
注解使用。 - 默认是采用
byType
装配,当指定了JSR-330规范中的@Named
注解之后,变成byName
装配。
@Qualifier
- 当使用自动按类型注入时,遇到有多个类型匹配的时候,就可以使用此注解来明确注入哪个bean对象。
- 注意: 它通常情况下和@Autowired注解一起使用
value
:指定匹配Bean的名称
@Primary
- 用于指定bean的注入优先级。被
@Primary
修饰的Bean
对象优先注入
@Named
- 通常配合
@Inject
使用,在自动注入时用来指定注入Bean
的名称 value
:要注入的Bean的名称
@Scope
- 作用域注解
- 用来配置 spring bean 的作用域,它标识 bean 的作用域
- 作用在类上和方法上
- 属性介绍
value singleton 表示该bean是单例的。(默认) prototype 表示该bean是多例的,即每次使用该bean时都会新建一个对象。 request 在一次http请求中,一个bean对应一个实例。 session 在一个httpSession中,一个bean对应一个实例。 proxyMode DEFAULT 不使用代理。(默认) NO 不使用代理,等价于DEFAULT。 INTERFACES 使用基于接口的代理(jdk dynamic proxy)。 TARGET_CLASS 使用基于类的代理(cglib)。
@Entity
- 实体类注解
@Table(name =“数据库表名”)
- 这个注解也注释在实体类上,对应数据库中相应的表。
@Id、@Column
- 用于标注实体类中的字段,pk字段标注为@Id,其余@Column。
@JsonIgnore
- 在json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。
- 一般标记在属性或者方法上,返回的json数据即不包含该属性
- 如果注解失效,可能是因为你使用的是
fastJson
,尝试使用对应的注解来忽略字段,注解为:@JSONField(serialize = false)
,使用方法一样。
初始化和销毁方法
-
通过
@Bean(initMethod="init",destoryMethod="destory")
方法 -
通过
bean
实现InitializingBean
来定义初始化逻辑,DisposableBean
定义销毁逻辑 -
可以使用JSR250:
@PostConstruct
:初始化方法;
@PreDestory
:销毁方法。 -
BeanPostProcessor
:bean的后置处理器,在bean初始化前后进行一些处理工作 -
postProcessBeforeInitialization
:在初始化之前工作; -
postProcessAfterInitialization
:在初始化工作之后工作;
Java配置类相关注解
@Configuration
- 表明当前类是spring的一个配置类。
- 替代
spring的applicationContext.xml
。 - 其本质就是
@Component
注解,被此注解修饰的类,也会被存入spring的IOC容器
value
:表名存入Spring容器中的Bean的ID。- 它是在spring3.0版本之后加入的。此注解是spring支持注解驱动开发的一个标志。
@ComponentScan
- 用于指定创建容器时要扫描的包。
- 在spring4.3版本之后还加入了一个
@ComponentScans
的注解,该注解可以支持配置多个@ComponentScan
。 - 该注解在指定扫描的位置时,可以指定包名,也可以指定扫描的类。同时支持定义扫描规则,例如包含哪些或者排除哪些。同时,它还可以通过
nameGenerator
自定义Bean
的命名规则 - 参数说明:
value
/basePackages
:用于指定要扫描的包。当指定了包的名称之后,spring会扫描指定的包及其子包下的所有类。basePackageClasses
:指定具体要扫描的类的字节码。nameGenrator
:指定扫描bean对象存入容器时的命名规则。默认情况下注入到IOC
中的Bean
的名称为类名的首字母小写。scopeResolver
:用于处理并转换检测到的Bean的作用范围。soperdProxy
:用于指定bean生成时的代理方式。resourcePattern
用于指定符合组件检测条件的类文件,默认是包扫描下的**/*.class
,即Spring会扫描打上了@ComponentScan
注解的类所在包以及子包下的所有类文件。useDefaultFilters
:是否对带有@Component
@Repository
@Service
@Controller
注解的类开启检测,默认是开启的。includeFilters
:自定义组件扫描的过滤规则,用以扫描组件。FilterType有5种类型:ANNOTATION
:注解类型,也是默认的类型ASSIGNABLE_TYPE
:指定固定类ASPECTJ
:ASPECTJ类型REGEX
:正则表达式CUSTOM
:自定义类型excludeFilters
:自定义组件扫描的排除规则。
lazyInit
:组件扫描时是否采用懒加载 ,默认不开启。
切面(AOP)相关注解
Spring支持AspectJ的注解式切面编程。
@Aspect: 声明一个切面
@After: 在方法执行之后执行(方法上)
@Before: 在方法执行之前执行(方法上)
@Around: 在方法执行之前与之后执行(方法上)
@PointCut: 声明切点
在java配置类中使用@EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持
异步相关
@EnableAsync
- 配置类中通过此注解开启对异步任务的支持;
@Async
- 在实际执行的bean方法使用该注解来声明其是一个异步任务
- 方法上或类上所有的方法都将异步
- 需要
@EnableAsync
开启异步任务
定时任务相关
@EnableScheduling
- 在配置类上使用,开启计划任务的支持(类上)
@Scheduled
- 来申明这是一个任务,包括
cron
,fixDelay
,fixRate
等类型 - 需要
@EnableScheduling
开启定时任务
Enable***注解说明
这些注解主要是用来开启对xxx的支持:
- @EnableAspectAutoProxy:开启对AspectJ自动代理的支持;
- @EnableAsync:开启异步方法的支持;
- @EnableScheduling:开启计划任务的支持;
- @EnableWebMvc:开启web MVC的配置支持;
- @EnableConfigurationProperties:开启对@ConfigurationProperties注解配置Bean的支持;
- @EnableJpaRepositories:开启对SpringData JPA Repository的支持;
- @EnableTransactionManagement:开启注解式事务的支持;
- @EnableCaching:开启注解式的缓存支持;
测试相关注解
@RunWith
- 运行器,Spring中通常用于对JUnit的支持
@ContextConfiguration
- 用来加载配置配置文件,其中classes属性用来加载配置类。
- 通常与
@RunWith(SpringJUnit4ClassRunner.class)
联合使用用来测试 locations = {"classpath*:/*.xml"}
就表示将classpath
路径里所有的xml文件
都包括进来,自动扫描的bean就可以拿到,此时就可以在测试类中使用@Autowired
注解来获取之前自动扫描包下的所有bean。
@SuppressWarnings:抑制\镇压\废止 Warnings警告
- @SuppressWarnings(“resource”)是J2SE 提供的一个批注。
- 该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。
- 允许您选择性地取消特定代码段(即,类或方法)中的警告。
- 其中的想法是当您看到警告时,您将调查它,如果您确定它不是问题,您就可以添加一个
@SuppressWarnings
批注,以使您不会再看到警告。 - 虽然它听起来似乎会屏蔽潜在的错误,但实际上它将提高代码安全性,因为它将防止您对警告无动于衷 — 您看到的每一个警告都将值得注意。
SpringMVC常用注解
@EnableWebMvc
- 在配置类中开启Web MVC的配置支持。
@Controller
- 控制器,处理http请求。
@RequestMapping
- Spring Web 应用程序中最常被用到的注解之一
- 将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上
@GetMapping、@DeleteMapping、@PostMapping、@PutMapping
- 用于将HTTP get/delete/post/put请求映射到特定处理程序的方法注解
- 是@RequestMapping的注解简写:
- @RequestMapping(value = “/say”,method = RequestMethod.GET)
等价于:@GetMapping(value = “/say”)
- @RequestMapping(value = “/say”,method = RequestMethod.DELETE)
等价于:@DeleteMapping(value = “/say”)
- @RequestMapping(value = “/say”,method = RequestMethod.POST)
等价于:@PostMapping(value = “/say”)
- @RequestMapping(value = “/say”,method = RequestMethod.PUT)
等价于:@PutMapping(value = “/say”)
@RequestBody
- 允许request的参数在request体中,而不是在直接连接的地址后面。(放在参数前)
- 通过
HttpMessageConverter
读取Request Body
并反序列化为Object
(泛指)对象
@PathVariable
- 用于接收路径参数,比如@RequestMapping(“/hello/{name}”)声明的路径,将注解放在参数前,即可获取该值,通常作为Restful的接口实现方法。
@RestController
- 该注解为一个组合注解
- 相当于
@ResponseBody
与@Controller
合在一起的作用 - 效果为:将方法返回的对象直接在浏览器上展示成json格式.
@ControllerAdvice
- 用来指明异常的处理类型
- 即如果这里指定异常为
ArithmeticException
,则数组越界异常就不会进到这个方法中来 - ControllerAdvice的常用场景
- 全局异常处理
- 全局数据绑定
- 全局数据预处理
- 注解定义全局异常处理类
- 示例:
@ControllerAdvice public class GlobalExceptionHandler { }
@ExceptionHandler
- 注解声明异常处理方法
- 示例:
@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) @ResponseBody String handleException(){ return "Exception Deal!"; } }
@InitBinder
- 用来设置
WebDataBinder
,用来自动绑定前台请求参数到Model
中。
@ModelAttribute
- 如果把
@ModelAttribute
放在方法的注解上时,代表的是:该Controller的所有方法在调用前,先执行此被@ModelAttribute
标记的方法。 - 可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。比如:权限的验证(
也可以使用Interceptor
)等。
@ModelAttribute
- 注释一个方法的参数
- 当作为方法的参数使用,指示的参数应该从模型中检索。
- 如果不存在,它应该首先实例化,然后添加到模型中,一旦出现在模型中,参数字段应该从具有匹配名称的所有请求参数中填充。
@Transactional
- 放在类级别时,表示所有该类的公共方法都配置相同的事务属性信息、放在方法级别时,表示该
- EmployeeService 的所有方法都支持事务并且是只读。当类级别配置了**@Transactional**,方法级别也配置了@Transactional,应用程序会以方法级别的事务属性信息来管理事务,换言之,方法级别的事务属性信息会覆盖类级别的相关配置信息。
- 编程式事务管理:
- 编程式事务管理使用
TransactionTemplate
或者直接使用底层的PlatformTransactionManager
。 - 对于编程式事务管理,spring推荐使用
TransactionTemplate
。
- 编程式事务管理使用
- 声明式事务管理:
- 建立在AOP之上的。
- 其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务
- 通过
@Transactional
就可以进行事务操作,更快捷而且简单。推荐使用
- 注解的属性信息
属性名 说明 name 当在配置文件中有多个 TransactionManager , 可以用该属性指定选择哪个事务管理器。 propagation 事务的传播行为,默认值为 REQUIRED。 isolation 事务的隔离度,默认值采用 DEFAULT。 timeout 事务的超时时间,默认值为-1。如果超过该时间限制但事务还没有完成,则自动回滚事务。 read-only 指定事务是否为只读事务,默认值为 false;为了忽略那些不需要事务的方法,比如读取数据,可以设置 read-only 为 true。 rollback-for 用于指定能够触发事务回滚的异常类型,如果有多个异常类型需要指定,各类型之间可以通过逗号分隔。 no-rollback- for 抛出 no-rollback-for 指定的异常类型,不回滚事务。
@PropertySource
- 指定读取资源文件的位置。此注解不仅支持
properties
,也支持xml文件
,并且通过YAML解析器
,配合自定义PropertySourceFactory
实现解析yml配置文件
- 参数说明
name
:指定资源的名称。如果没有指定,将根据基础资源描述生成。value
:指定资源的位置。可以是类路径,也可以是文件路径。ignoreResourceNotFound
:没有找到资源文件是否忽略,默认是false,也就是说当资源文件不存在时spring启动将会报错。encoding
:指定解析资源文件使用的字符集。factory
:指定读取对应资源文件的工厂类,默认的是PropertySourceFactory。
@DependsOn
- 指定某个Bean的创建需要依赖其它
Bean
value
:需要依赖的Bean
的名称- spring中没有特定
Bean
的加载顺序,使用此注解则可指定Bean
的加载顺序。
- @Lazy
- 用于指定单例bean对象的创建时机(是否采用延迟加载)
value
:默认值为true,表示开启。- 没有使用此注解:单例bean的生命周期与容器相同。也就是容器创建后会将所有的单例Bean创建好放入容器中
- 使用了此注解:单例对象的创建时机变成了第一次使用时创建。
- 注意:
@Lazy
只对单例Bean起作用。
@Conditional
根据条件选择是否像容器中注入的bean对象
value
:用于提供一个Condition
接口的实现类,实现类中需要编写具体代码实现注入的条件。
当matches方法返回true表示向容器中注入Bean,返回false不向容器中注入Bean
-
@Value
用于注入基本类型和String类型的数据。@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Value { /** * The actual value expression: for example {@code #{systemProperties.myProp}}. */ String value(); }
- 支持spring的
EL表达式
,可以通过${}
的方式获取配置文件中的数据。配置文件支持properties,xml
和yml
文件。 value
:指定注入的数据或者spring的EL表达式
。
- 支持spring的
-
@Scope
用于指定Bean
对象的生命周期。@Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Scope { /** * Alias for {@link #scopeName}. * @see #scopeName */ @AliasFor("scopeName") String value() default ""; /** * Specifies the name of the scope to use for the annotated component/bean. * <p>Defaults to an empty string ({@code ""}) which implies * {@link ConfigurableBeanFactory#SCOPE_SINGLETON SCOPE_SINGLETON}. * @since 4.2 * @see ConfigurableBeanFactory#SCOPE_PROTOTYPE * @see ConfigurableBeanFactory#SCOPE_SINGLETON * @see org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST * @see org.springframework.web.context.WebApplicationContext#SCOPE_SESSION * @see #value */ @AliasFor("value") String scopeName() default ""; ScopedProxyMode proxyMode() default ScopedProxyMode.DEFAULT;
- value:指定作用范围的取值。在注解中默认值是""。但是在spring初始化容器时,会借助ConfigurableBeanFactory接口中的类成员:
String SCOPE_SINGLETON = “singleton”
; - singleton:单例模式(默认)
- prototype:原型模式,每次获取Bean都会创建一个对象
- request:在web项目中可选,给每一个
http request
新建一个Bean
实例 - session:在web项目中可选,给每一个
http session
新建一个Bean
实例 - application:在web项目中可选,bean实例同应用一起创建,并且继续使用到应用结束
- scopeName: 它和
value
的作用是一样的。 - proxyMode:它是指定
bean
对象的代理方式的。指定的是ScopedProxyMode
枚举的值- DEFAULT:默认值(
NO
) - NO:不使用代理。
- INTERFACES:使用JDK官方的基于接口的代理。
- TARGET_CLASS:使用CGLIB基于目标类的子类创建代理对象
- DEFAULT:默认值(
- value:指定作用范围的取值。在注解中默认值是""。但是在spring初始化容器时,会借助ConfigurableBeanFactory接口中的类成员:
-
@PostConstruct
用于指定bean对象的初始化方法。@Documented @Retention (RUNTIME) @Target(METHOD) public @interface PostConstruct { }
-
@PreDestroy
用于指定bean对象的销毁方法@Documented @Retention (RUNTIME) @Target(METHOD) public @interface PreDestroy { }
-
@EnableTransactionManagement
开启基于注解的声明式事务
一般用于配置类@Configuration @EnableTransactionManagement//开启基于注解的声明式事务 public class SpringTxConfig { }
SpringBoot相关注解
启动注解 :@SpringBootApplication
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
// ... 此处省略源码
}
-
查看源码可发现,
@SpringBootApplication
是一个复合注解,包含了@SpringBootConfiguration
,@EnableAutoConfiguration
,@ComponentScan
这三个注解 -
@SpringBootConfiguration
- 继承
@Configuration
注解,主要用于加载配置文件 - 标注当前类是配置类, 并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。
- 继承
-
@EnableAutoConfiguration
- 开启自动配置功能
- 帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器
- 借助于Spring框架原有的一个工具类:
SpringFactoriesLoader
的支持,@EnableAutoConfiguration
可以智能的自动配置功效才得以大功告成
-
@ComponentScan
- 自动扫描并加载符合条件的组件或bean定义,最终将这些bean定义加载到容器中
- 可以通过basePackages等属性指定@ComponentScan自动扫描的范围
- 不指定:默认Spring框架实现从声明@ComponentScan所在类的package进行扫描
取请求参数值
-
@PathVariable
- 获取url中的数据
- 示例:
@Controller @RequestMapping("/User") public class HelloWorldController { @RequestMapping("/getUser/{uid}") public String getUser(@PathVariable("uid")Integer id, Model model) { System.out.println("id:"+id); return "user"; } }
- 请求示例:http://localhost:8080/User/getUser/123
-
@RequestParam
- 获取请求参数的值
- 示例:
@Controller @RequestMapping(“/User”) public class HelloWorldController { @RequestMapping("/getUser") public String getUser(@RequestParam("uid")Integer id, Model model) { System.out.println("id:"+id); return "user"; } }
- 请求示例:http://localhost:8080/User/getUser?uid=123
-
@RequestHeader
- 把Request请求header部分的值绑定到方法的参数上
- @CookieValue
- 把Request header中关于cookie的值绑定到方法的参数上
导入配置文件
@PropertySource
- 引入
properties
文件 - 引入单个
properties
文件:@PropertySource(value = {“classpath : xxxx/xxx.properties”})
- 引入多个
properties
文件:@PropertySource(value = {“classpath : xxxx/xxx.properties”,“classpath : xxxx.properties”})
@ImportSource
- 导入xml配置文件
- 可以额外分为两种模式 相对路径classpath,绝对路径(真实路径)file
- 注意:单文件可以不写value或locations,value和locations都可用
- 相对路径(classpath)
- 引入单个xml配置文件:
@ImportSource(“classpath : xxx/xxxx.xml”)
- 引入多个xml配置文件:
@ImportSource(locations={“classpath : xxxx.xml” , “classpath : yyyy.xml”})
- 引入单个xml配置文件:
- 绝对路径(file)
- 引入单个xml配置文件
@ImportSource(locations= {“file : d:/hellxz/dubbo.xml”})
- 引入多个xml配置文件:
@ImportSource(locations= {“file : d:/hellxz/application.xml” , “file : d:/hellxz/dubbo.xml”})
- 引入单个xml配置文件
@Value
- 取值:使用@Value注解取配置文件中的值
@Value(“${`properties/yml中的键`}”) private String xxx;
json常用注解
@JsonIgnoreProperties
- 此注解是类注解
- json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。
- 将此标签加在user类的类名上 ,可以多个属性也可以单个属性。
//生成json时将name和age属性过滤 @JsonIgnoreProperties({"name"},{"age"}) public class user { private String name; private int age; }
@JsonIgnore
- 此注解用于属性或者方法上(最好是属性上)
- json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。
//生成json 时不生成age 属性 public class user { private String name; @JsonIgnore private int age; }
@JsonFormat
- 此注解用于属性或者方法上(最好是属性上)
- 可以方便的把Date类型直接转化为我们想要的模式
public class User{ @JsonFormat(pattern = “yyyy-MM-dd HH-mm-ss”) private Date date; }
@JsonSerialize
- 此注解用于属性或者
getter
方法上 - 用于在序列化时嵌入我们自定义的代码
- 比如:序列化一个
double
时在其后面限制两位小数点。
@JsonDeserialize
- 此注解用于属性或者
setter
方法上 - 用于在反序列化时可以嵌入我们自定义的代码
@Transient
- 如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架默认其注解为@Basic;
@JsonIgnoreType
- 标注在类上
- 当其他类有该类作为属性时,该属性将被忽略。
@JsonProperty
- 指定某个属性和json映射的名称。
- 例如:
- json字符串为
{“user_name”:”aaa”}
- 而java中命名要遵循驼峰规则,则为
userName
- 这时通过@JsonProperty 注解来指定两者的映射规则即可。
public class SomeEntity { @JsonProperty("user_name") private String userName; }
- json字符串为
只在序列化情况下生效的注解
@JsonPropertyOrder
- 在将 java pojo 对象序列化成为 json 字符串时,使用此注解可以指定属性在
json
字符串中的顺序。
@JsonInclude
- 在将 java pojo 对象序列化成为 json 字符串时,使用此注解可以控制在哪些情况下才将被注解的属性转换成
json
, - 例如:只有属性不为 null 时。
@JsonInclude(JsonInclude.Include.NON_NULL)
- 这个注解放在类上,返给前端的json里就没有null类型的字段,即实体类与json互转的时候 属性值为null的不参与序列化。
- 另外还有很多其它的范围,例如
NON_EMPTY
、NON_DEFAULT
等
在反序列化情况下生效的注解
@JsonSetter
- 标注于 setter 方法上
- 可以解决 json 键名称和 java pojo 字段名称不匹配的问题。