
看fastjson源码,SerializeWriter
public void writeEnum(Enum<?> value, char c) {if (value == null) {
writeNull()
write(',')
return
}
if (isEnabled(SerializerFeature.WriteEnumUsingToString)) {
if (isEnabled(SerializerFeature.UseSingleQuotes)) {
write('\'')
write(value.name())
write('\'')
write(c)
} else {
write('\"')
write(value.name())
write('\"')
write(c)
}
return
}
writeIntAndChar(value.ordinal(), c)
}
可以看出SerializeWriter在初始化的时候,features不要设置SerializerFeature.WriteEnumUsingToString
因为JSON.DEFAULT_PARSER_FEATURE是enable了SerializerFeature.WriteEnumUsingToString,也就是说是读枚举的value值而不是int值
public static int DEFAULT_GENERATE_FEATUREstatic {
int features = 0
features |= com.alibaba.fastjson.serializer.SerializerFeature.QuoteFieldNames.getMask()
features |= com.alibaba.fastjson.serializer.SerializerFeature.SkipTransientField.getMask()
features |= com.alibaba.fastjson.serializer.SerializerFeature.WriteEnumUsingToString.getMask()
features |= com.alibaba.fastjson.serializer.SerializerFeature.SortField.getMask()
// features |=
// com.alibaba.fastjson.serializer.SerializerFeature.WriteSlashAsSpecial.getMask()
DEFAULT_GENERATE_FEATURE = features
}
所以,解决你这个问题的方法就是
之前调用下
JSONSerializer.config(SerializerFeature.WriteEnumUsingToString,false)即可
@JSONField
作用:在字段和方法上
1 .Field:@JSONField作用在Field时,name可以定义输入key的名字,反序列化的时 值不会赋值到属性上
2 .作用在setter和getter方法上
3 .format :用在Date类型的字段来格式化时间格式
4 .布尔类型:serialize和deserialize
在序列化的时候就不包含这个字段了。deserialize与之相反。但是有一点需要注意,当字段为final的时候注解放在字段上是不起作用的,这时候应该放在get或set方法上。
5. serialzeFeatures 属性:fastjson默认的序列化规则是当字段的值为null的时候,是不会序列化这个字段
对象序列化下边的类,结果是:{"name":"LiSi","age":18}
6 .SerializerFeature枚举
当value的值为null的时候,依然会把它的值序列化出来: {"name":"LiSi","age":18,"address":null}
当字段类型为int类型时,会序列化成 0,需要把类型改成Integer
1 . 引入jar包
2 . jsonProperty介绍
@JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name,@JsonProperty(value="name")。
3 . jackson的@JsonIgnore使用
作用:在json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。
使用方法:一般标记在属性或者方法上,返回的json数据即不包含该属性。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)