fastjson2/docs/annotations_cn.md

117 lines
3.2 KiB
Markdown
Raw Normal View History

2022-05-21 17:17:26 +08:00
# FASTJSON2提供的Annotations
## 1. JSONField
JSONField是作用在Field、Method、Parameter上的Annotation可以用来指定序列化字段的顺序、名字、格式、是否忽略、配置JSONReader/JSONWriter的Features等。
### 1.1 定制名字序列化和反序列化
可以通过JSONField.name来配置序列化输出的字段名和反序列化是映射的字段名
* 配置在public field上
```java
public class A {
@JSONField(name = "ID")
public int id;
}
```
* 配置在public getter/setter method上
```java
public class A {
private int id;
@JSONField(name = "ID")
public int getId() {return id;}
@JSONField(name = "ID")
public void setId(int value) {this.id = id;}
}
```
### 1.2 配置字段输出和反序列化的格式
在Date类型的字段经常需要用定制的格式做序列化和反序列化可以通过JSONField.format来做配置。
```java
public class VO {
// 配置date序列化和反序列使用yyyyMMdd日期格式
@JSONField(format = "yyyyMMdd")
public Date date;
}
```
### 1.3 忽略字段
可以通过JSONField.serialize配置该字段是否要序列化通过JSONField.deserialize配置该字段是否需要反序列化。
* 配置序列化反序列化忽略特定字段
```java
public class VO {
@JSONField(serialize = false)
public Date date;
}
```
* 配置反序列化忽略特定字段
```
public class VO {
@JSONField(deserialize = false)
public Date date;
}
```
### 1.4 配置字段的序列化输出的的顺序
可以通过JSONField.ordinal来配置序列化输出的顺序
```java
public static class VO {
@JSONField(ordinal = 1)
public String type;
@JSONField(ordinal = 2)
public String templateId;
}
```
### 1.5 配置序列化Features
2022-05-21 17:53:19 +08:00
可以通过JSONField.serializeFeatures来指定序列化的Feature。更多配置Features参考 [https://alibaba.github.io/fastjson2/features_cn](https://alibaba.github.io/fastjson2/features_cn)
2022-05-21 17:17:26 +08:00
```java
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONWriter.Feature;
import org.junit.jupiter.api.Test;
@Test
public void test() {
Bean bean = new Bean();
bean.id = 100;
assertEquals("{\"id\":\"100\"}", JSON.toJSONString(bean));
}
public static class Bean {
@JSONField(serializeFeatures = Feature.WriteNonStringValueAsString)
public int id;
}
```
## 2. JSONType
JSONType是配置在Class/Interface上的Annotation可以配置改类型的所有字段的NamingStrategy、序列化和反序列化忽略的字段、JSONReader/JSONWriter的Features等。
### 2.1 配置序列化和反序列化忽略的字段
在下面的例子中序列化输出只包括id1忽略id2和id2
```java
@JSONType(ignores = {"id2", "id3"})
public static class Bean {
public int getId() {
return 101;
}
public int getId2() {
return 102;
}
public int getId3() {
return 103;
}
}
```
# 3. 基于mixin机制注入Annotation
当你需要定制化序列化一些LIB里面的类你无法修改这些类的代码你可以使用FASTJSON2的Minxin功能注入Annotation。
2022-05-21 17:53:19 +08:00
具体使用介绍参考这里: [https://alibaba.github.io/fastjson2/mixin_cn](https://alibaba.github.io/fastjson2/mixin_cn)