java jsonfield_【技术累积】【点】【java】【27】@JSONField
@JSONField
该注解隶属于阿里fastjson,方便fastjson处理对象时的一些操作
源码
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER })
public @interface JSONField {
/**
* config encode/decode ordinal
* @since 1.1.42
* @return
*/
int ordinal() default 0;
String name() default "";
String format() default "";
boolean serialize() default true;
boolean deserialize() default true;
SerializerFeature[] serialzeFeatures() default {};
Feature[] parseFeatures() default {};
String label() default "";
/**
* @since 1.2.12
*/
boolean jsonDirect() default false;
/**
* Serializer class to use for serializing associated value.
*
* @since 1.2.16
*/
Class> serializeUsing() default Void.class;
/**
* Deserializer class to use for deserializing associated value.
*
* @since 1.2.16
*/
Class> deserializeUsing() default Void.class;
/**
* @since 1.2.21
* @return the alternative names of the field when it is deserialized
*/
String[] alternateNames() default {};
/**
* @since 1.2.31
*/
boolean unwrapped() default false;
}
ordinal() 顺序设置。
缺省fastjson序列化一个java bean,是根据fieldName的字母序进行序列化的,你可以通过ordinal指定字段的顺序。这个特性需要1.1.42以上版本
name() 指定名字。指定后,序列化后字段名变为指定名称,反序列化同理;
format() 指定日期格式;
serialize() deserialize() 是否序列化和反序列化,默认true。
serialzeFeatures() 序列化特性选择,具体参考后面文章吧;通过枚举选择
parseFeatures() 解释特性选择;通过枚举选择
label() 打标记,可定制化输出
@JSONField(label = "normal")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@JSONField(label = "normal")
public String getName() {
return name;
}
System.out.println(JSON.toJSONString(v, Labels.includes("normal")));
jsonDirect() 直接输出而不经过json转译
在fastjson-1.2.12版本中,JSONField支持一个新的配置项jsonDirect,它的用途是:当你有一个字段是字符串类型,里面是json格式数据,你希望直接输入,而不是经过转义之后再输出。
serializeUsing() deserializeUsing() 指定序列化、反序列化使用自定义Serialize、Parser(注意,直接写在类中即可,格式固定,关键是取值)
//示例1
public static class TimeStampDeserializer implements ObjectDeserializer {
@Override
public T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
String time = parser.getLexer().stringVal();
if (StringUtils.isBlank(time)) {
return (T)String.valueOf(new Date().getTime());
} else {
return (T)(time + "000");
}
}
@Override
public int getFastMatchToken() {
return 0;
}
}
//示例2
public static class Model {
@JSONField(serializeUsing = ModelValueSerializer.class)
public int value;
}
public static class ModelValueSerializer 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);
}
}
alternateNames() 多名字。允许多个名字的变量转成一个
@JSONField(alternateNames = {"user", "person"})
public String name;
unwrapped() 不封箱
搭配JSON.parseObject
给输出结构体中field配置上@JSONField(name="aaa")等,直接转出得到的json串
Response response = JSON.parseObject(res, Response.class);
@Setter
@Getter
@NoArgsConstructor
@ToString
public class Response {
@JSONField(name = "answerList")
private List answers;
@JSONField(name = "timeStamp")
private String timeStamp;
@JSONField(name = "type")
private String answerType;
@JSONField(name = "id")
private String erp;
@JSONField(name = "session")
private String sessionId;
@JSONField(name = "topic")
private String topic;
@JSONField(deserialize = false, serialize = false)
private String answerType = AnswerTypeEnum.ANSWER.getCode();
}
参考文章
java jsonfield_【技术累积】【点】【java】【27】@JSONField相关推荐
- 三流Java搞技术,二流Java搞框架,一流Java…
对于 Java 程序员来说,若想实现质的飞跃,还得靠"黄金五年". "黄金五年"其实是 Java 程序界流行的说法,指一个程序员从入职的时候算起,前五年的选择和 ...
- java 字节码增强原理_深入浅出Java探针技术1--基于java agent的字节码增强案例
Java agent又叫做Java 探针,本文将从以下四个问题出发来深入浅出了解下Java agent 一.什么是java agent? Java agent是在JDK1.5引入的,是一种可以动态修改 ...
- java探针 字节码增强_深入浅出Java探针技术1--基于java agent的字节码增强案例
Java agent又叫做Java 探针,本文将从以下四个问题出发来深入浅出了解下Java agent 一.什么是java agent? Java agent是在JDK1.5引入的,是一种可以动态修改 ...
- 【JAVA开发技术进阶】 Java实现运行任意目录下class中加了@MyTest的空参方法(实现图形界面)
说明: 因为上个代码,总是要输入完整的绝对路径,比较麻烦,于是,就写了这个小程序,直接进入文件对话框选择需要运行的class文件. 只需要提前输入完整的类名. 注意:加的MyTest必须打个包,加上: ...
- java nio技术_攻破JAVA NIO技术壁垒
现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty.学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能.再者,现在互联网的面 ...
- java p2p 技术可行性分析_Atitit JAVA p2p设计与总结 JXTA 2
AtititJAVAp2p设计与总结JXTA 2 JXTA 2 是开放源代码 P2P 网络的第二个主要版本,它利用流行的.基于 Java 的参考实现作为构建基础.在设计方面进行了重要的修改,以获得更高 ...
- java 2017技术_2017《Java技术》预备作业 计科1502 李宇蒙
1.阅读邹欣老师的博客,谈谈你期望的师生关系是什么样的? 我期望的师生关系是朋友,更是导师.在上课时,老师则以导师的身份,认真教学,学生则细心聆听,学习每个知识点:下课时,老师和学生则是朋友,私下以朋 ...
- Java开发技术总结!java读取文件内容并输出
一.内存与线程 1.内存结构 内存是计算机的重要部件之一,它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平.JVM的内存结构规定Java程序 ...
- java后端技术路线,Java高级工程师进阶学习
前言 刚刚过去的双十一,让"高性能""高可用""亿级"这3个词变成了技术热点词汇,也让很多人再次萌发成为「架构师」的想法.先问大家一个问题: ...
- java 压缩技术_Java压缩技术(三) ZIP解压缩——Java原生实现
JavaEye的朋友跟我说:"你一口气把ZIP压缩和解压缩都写到一个帖子里,我看起来很累,不如分开好阅读".ok,面向读者需求,我做调整,这里单说ZIP解压缩! 相关链接: Jav ...
最新文章
- GitHub接连封杀开源项目惹众怒,CEO亲自道歉
- 关于android基础教程一书的初步解读后发现的一些问题
- 斐波那契数列矩阵快速幂
- java异常_Java线程池「异常处理」正确姿势:有病就得治
- 类的本质 Objective-C基础
- 【知识图谱系列】清华大学基于对比学习的图谱预训练模型GCC
- 【仿真】Proteus8.9 下载与安装教程(超详细)
- 分享一个我做的记账系统(网站)
- 货币代码,不允许ALE通讯
- 中职计算机教师发言范文话,中职班主任发言稿范文(精选4篇)
- sap 流程图 退货销售订单_销售订单_退货型
- 号码认证一键免密登录,让验证更简单!
- 基于Jenkins和Kubernetes流水线实现应用的自动发版
- 影视剧中十大经典反派台词!(来自大洋论坛)
- Windows 10 64位系统下Neo4j安装教程(2021.1.13)
- Vue3 - props
- 远程桌面打开任务管理器
- 新手用cdr如何设计名片_新名片设计
- 一生的读书计划——影响中国历史进程的中国名人
- 条形码控件字体的工具包Code 39 Font Advantage Package
热门文章
- java log4j 异步_Log4j2异步日志之异步格式化
- 网络配置_CentOS8 网络配置
- 使用绑定进行WPF DataGrid格式化的指南
- 使用TensorFlow.js的AI聊天机器人三:改进了文本中的情感检测
- WPF | 控制库| MultiSelectCombobox
- 带有MySQL和Bootstrap的Django 3教程和CRUD示例
- mysql jdbc百度_mysql8.0 jdbc连接注意事项
- excel三次样条函数_用于数字成像的双三次插值技术?
- win10 python免安装_使用Python编写免安装运行时、以Windows后台服务形式运行的WEB服务器...
- python派落塔问题_浅析python递归函数和河内塔问题