fastjson中@jsonType注解的使用

1.@JSONType的使用

@JSONType(includes = {"name","sex"})

@JSONType(ignores ={"id", "sex"}) 

放在实体类中就会只装配列举的字段,

2.@JSONField的使用

放在实体类中的某个字段上面

protected class H5PayConfig {

    @JSONField(name = "appId")
    private String appId;
}

上面两个注解主要区别就是一个是在实体类上面,还有一个是添加在实体类中的某些字段上或者是方法上,均不需要实现序列化的接口



下面是粘贴

1在实体类上的字段使用@JSONField定制序列化

//配置序列化的时候,不序列化id 

@JSONField(serialize=false) 

private int id; 

private String name;// 姓名 

private int age; //年龄 

// 配置序列化的名称 

@JSONField(name="gender") 

public String sex;

 

 

2、在类上通过@JSONType定制序列化

//配置序列化的时候,不序列化id  sex

@JSONType(ignores ={"id", "sex"}) 

public class Uoimplements Serializable {}

 

// 配置序列化的时候,序列化name sex

@JSONType(includes={"name","sex"}) 

public class Uo1implements Serializable {}

 

注意和@JSONField不同的是,@JSONType是配置在类上的,而@JSONField是配置在字段和方法上的




  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
`@JSONType` 注解fastjson 提供的一种用于自定义序列化和反序列化的注解。其,`serializer` 属性用于指定一个实现了 `com.alibaba.fastjson.serializer.JSONSerializer` 接口的类,用于自定义序列化逻辑。`EnumDeserializer` 属性用于指定一个实现了 `com.alibaba.fastjson.parser.deserializer.ObjectDeserializer` 接口的类,用于自定义反序列化逻辑。 具体来说,`serializer` 属性可以用于以下场景: - 自定义序列化某个特定类型的逻辑,比如日期类型、枚举类型等; - 为某个类或者属性指定一个特定的序列化器,用于序列化 JSON。 而 `EnumDeserializer` 属性则主要用于自定义反序列化枚举类型的逻辑。当 fastjson 在反序列化 JSON 时遇到一个枚举类型时,它会首先根据枚举值的名称或者序号来尝试匹配对应的枚举值。如果匹配失败,fastjson 就会调用 `EnumDeserializer` 实例的 `deserialze` 方法来尝试自定义的反序列化逻辑。 下面是一个示例代码,展示了如何使用 `@JSONType` 的 `serializer` 和 `EnumDeserializer` 属性: ```java public enum Gender { MALE, FEMALE } @JSONType(serializer = MyDateSerializer.class) public class Person { private String name; private Gender gender; private Date birthday; // getters and setters } public class MyDateSerializer implements ObjectSerializer { @Override public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException { // 自定义日期类型的序列化逻辑 } } public class MyEnumDeserializer implements ObjectDeserializer { @Override public Gender deserialze(DefaultJSONParser parser, Type type, Object fieldName) { // 自定义枚举类型的反序列化逻辑 } } // 使用 MyEnumDeserializer 反序列化 Gender 类型 JSON.parseObject("{\"name\":\"Tom\",\"gender\":\"MALE\",\"birthday\":\"2022-07-01\"}", Person.class, Feature.SupportNonPublicField); ``` 在上面的代码,我们定义了一个 `Person` 类,其使用了 `@JSONType` 注解,指定了 `MyDateSerializer` 类作为日期类型的序列化器。同时,我们还定义了一个 `MyEnumDeserializer` 类,用于自定义 `Gender` 枚举类型的反序列化逻辑。最后,我们使用 `JSON.parseObject` 方法来反序列化 JSON,其传入了 `Feature.SupportNonPublicField` 参数,用于支持反序列化私有属性。由于我们指定了 `MyEnumDeserializer` 类作为 `Gender` 类型的反序列化器,因此 fastjson使用 `MyEnumDeserializer` 的逻辑来尝试反序列化 `Gender` 类型。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值