fastJson的@JSONField和jackson的@Jso

2021-03-15  本文已影响0人  极客匠

fastjson的@JSONField注解

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.28</version>
</dependency>

@JSONField
作用:在字段和方法上

1.Field:@JSONField作用在Field时,name可以定义输入key的名字,反序列化的时 值不会赋值到属性上

2.作用在setter和getter方法上

/**
     * bean 转json 时会把bean中的name转换为project_name
     * 
     */
    @JSONField(name="project_name")
    public String getName() {
        return name;
    }
 /**
     * son 转bean 时会把json中的project_name值赋值给name
     * 
     */
    @JSONField(name="project_name")
    public void setName(String name) {
        name= name;
    }

3.format :用在Date类型的字段来格式化时间格式

4.布尔类型:serialize和deserialize

在序列化的时候就不包含这个字段了。deserialize与之相反。但是有一点需要注意,当字段为final的时候注解放在字段上是不起作用的,这时候应该放在get或set方法上。

@JSONField(serialize=false) 
private String name

5.serialzeFeatures 属性:fastjson默认的序列化规则是当字段的值为null的时候,是不会序列化这个字段

{"name":"LiSi","age":18,"address":null}

对象序列化下边的类,结果是:{"name":"LiSi","age":18}

Student s =  new Student ();
s.setName("LiSi");
s.setAge(18);
s.setAdderss(null);

6.SerializerFeature枚举

@JSONField(serialzeFeatures=SerializerFeature.WriteMapNullValue)
private String address;

当value的值为null的时候,依然会把它的值序列化出来: {"name":"LiSi","age":18,"address":null}

当字段类型为int类型时,会序列化成 0,需要把类型改成Integer

jackson的@jsonProperty使用

1. 引入jar包

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.3</version>
</dependency>

2. jsonProperty介绍

@JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name,@JsonProperty(value="name")。

3. jackson的@JsonIgnore使用

作用:在json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。

使用方法:一般标记在属性或者方法上,返回的json数据即不包含该属性。

上一篇下一篇

猜你喜欢

热点阅读