jsonfield注解不生效_@jsonfield注解「建议收藏」

jsonfield注解不生效_@jsonfield注解「建议收藏」讲到@JSONField注解,就不得不提到Alibaba开源的fasejsonfastjson是目前java语言中最快的json库,比自称最快的jackson速度要快,第三方独立测试结果看这里

讲到@JSONField 注解,就不得不提到Alibaba 开源的fasejson

fastjson是目前java语言中最快的json库,比自称最快的jackson速度要快,第三方独立测试结果看这里:https://github.com/eishay/jvm-serializers/wiki

这里有jackson作者cowtowncoder等人对fastjson的性能评价:https://groups.google.com/forum/#!topic/java-serialization-benchmarking/8eS1KOquAhw

Fastjson VS gson性能
fastjson比gson快大约6倍,测试结果上这里:https://github.com/eishay/jvm-serializers/wiki/Staging-Results

下面我们来介绍@JSONField 注解的应用:

1. JSONField 介绍

注意:1.1、若属性是私有的,必须有set*方法。否则无法反序列化。

package com.alibaba.fastjson.annotation;
public @interface JSONField {
// 配置序列化和反序列化的顺序,1.1.42版本之后才⽀持
int ordinal() default 0;
// 指定字段的名称
String name() default "";
// 指定字段的格式,对⽇期格式有⽤
String format() default "";
// 是否序列化
boolean serialize() default true;
// 是否反序列化
boolean deserialize() default true;
}

2. JSONField配置方式

2.1FieldInfo可以配置在getter/setter方法或者字段上。例如:
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;}
}
2.2 配置在field上
public class A {
    @JSONField(name="ID")
    private int id;

    public int getId() {return id;}
    public void setId(int value) {this.id = id;}
}
2.3 使⽤format配置⽇期格式化
public class A {
    // 配置date序列化和反序列使⽤yyyyMMdd⽇期格式
    @JSONField(format="yyyyMMdd")
    public Date date;
}
2.4 使⽤serialize/deserialize指定字段不序列化
public class A {
    @JSONField(serialize=false)
    public Date date;
}
2.5 使⽤ordinal指定字段的顺序

注:缺省fastjson序列化一个java bean,是根据fieldName的字母序进行序列的你可以通过ordinal指定字段的顺序。这个特性需要1.1.42以上版本。

public static class VO {
    @JSONField(ordinal = 3)
    private int f0;
    @JSONField(ordinal = 2)
    private int f1;
    @JSONField(ordinal = 1)
    private int f2;
}
2.6 使⽤serializeUsing制定属性的序列化类
*在fastjson 1.2.16版本之后,JSONField的持新的定制化配置serializeUsing,可以单独对某个类的某个属性定制序列化,例如:*


package com.fxbin123.bean;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.JSONSerializer;
import com.alibaba.fastjson.serializer.ObjectSerializer;

import java.io.IOException;
import java.lang.reflect.Type;

/**
 * @创建用户: fxb
 * @创建时间: 2017年11月07日 10:00
 * @描述: myself test demo 
 */
public class MyTest {
    public static class A {
        @JSONField(serializeUsing = AValueSerializer.class)
        public int value;
    }

    public static class AValueSerializer implements ObjectSerializer {
        @Override
        public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
                          int features) throws IOException {
            Integer value = (Integer) object;
            String text = value + "元";
            serializer.write(text);
        }
    }

    public static void main(String[] args) {
        A obj = new A();
        obj.value = 100;
        String json = JSON.toJSONString(obj);
        System.out.println(json);
    }
}

运行结果打印输出
在这里插入图片描述

2.8 JSONField jsonDirect

在fastjson-1.2.12版本中,JSONField增加了一个新的配置项jsonDirect,它的⽤是:当你有一个字段是字符串类型,但不是json格式数据,你希望直接输json,而不是经过转义之后再输出。

 package com.fxbin123.bean;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.annotation.JSONField;
    import com.alibaba.fastjson.serializer.JSONSerializer;
    import com.alibaba.fastjson.serializer.ObjectSerializer;
    
    import java.io.IOException;
    import java.lang.reflect.Type;
    
    /**
     * @创建用户: fxb
     * @创建时间: 2017年11月07日 10:00
     * @描述: myself test demo
     */
    public class MyTest {
        public static void main(String[] args) {
    //        A obj = new A();
    //        obj.value = 100;
    //        String json = JSON.toJSONString(obj);
    //        System.out.println(json);
    
            B b = new B();
            b.id = 9999;
            b.value = "{}";
            String json = JSON.toJSONString(b);
            System.out.println(json);
        }
        public static class B{
            public int id;
            @JSONField(jsonDirect = true)
            public String value;
        }
    }

今天的文章jsonfield注解不生效_@jsonfield注解「建议收藏」分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/69198.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注