@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相关推荐

  1. 三流Java搞技术,二流Java搞框架,一流Java…

    对于 Java 程序员来说,若想实现质的飞跃,还得靠"黄金五年". "黄金五年"其实是 Java 程序界流行的说法,指一个程序员从入职的时候算起,前五年的选择和 ...

  2. java 字节码增强原理_深入浅出Java探针技术1--基于java agent的字节码增强案例

    Java agent又叫做Java 探针,本文将从以下四个问题出发来深入浅出了解下Java agent 一.什么是java agent? Java agent是在JDK1.5引入的,是一种可以动态修改 ...

  3. java探针 字节码增强_深入浅出Java探针技术1--基于java agent的字节码增强案例

    Java agent又叫做Java 探针,本文将从以下四个问题出发来深入浅出了解下Java agent 一.什么是java agent? Java agent是在JDK1.5引入的,是一种可以动态修改 ...

  4. 【JAVA开发技术进阶】 Java实现运行任意目录下class中加了@MyTest的空参方法(实现图形界面)

    说明: 因为上个代码,总是要输入完整的绝对路径,比较麻烦,于是,就写了这个小程序,直接进入文件对话框选择需要运行的class文件. 只需要提前输入完整的类名. 注意:加的MyTest必须打个包,加上: ...

  5. java nio技术_攻破JAVA NIO技术壁垒

    现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty.学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能.再者,现在互联网的面 ...

  6. java p2p 技术可行性分析_Atitit JAVA p2p设计与总结  JXTA 2

    AtititJAVAp2p设计与总结JXTA 2 JXTA 2 是开放源代码 P2P 网络的第二个主要版本,它利用流行的.基于 Java 的参考实现作为构建基础.在设计方面进行了重要的修改,以获得更高 ...

  7. java 2017技术_2017《Java技术》预备作业 计科1502 李宇蒙

    1.阅读邹欣老师的博客,谈谈你期望的师生关系是什么样的? 我期望的师生关系是朋友,更是导师.在上课时,老师则以导师的身份,认真教学,学生则细心聆听,学习每个知识点:下课时,老师和学生则是朋友,私下以朋 ...

  8. Java开发技术总结!java读取文件内容并输出

    一.内存与线程 1.内存结构 内存是计算机的重要部件之一,它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平.JVM的内存结构规定Java程序 ...

  9. java后端技术路线,Java高级工程师进阶学习

    前言 刚刚过去的双十一,让"高性能""高可用""亿级"这3个词变成了技术热点词汇,也让很多人再次萌发成为「架构师」的想法.先问大家一个问题: ...

  10. java 压缩技术_Java压缩技术(三) ZIP解压缩——Java原生实现

    JavaEye的朋友跟我说:"你一口气把ZIP压缩和解压缩都写到一个帖子里,我看起来很累,不如分开好阅读".ok,面向读者需求,我做调整,这里单说ZIP解压缩! 相关链接: Jav ...

最新文章

  1. GitHub接连封杀开源项目惹众怒,CEO亲自道歉
  2. 关于android基础教程一书的初步解读后发现的一些问题
  3. 斐波那契数列矩阵快速幂
  4. java异常_Java线程池「异常处理」正确姿势:有病就得治
  5. 类的本质 Objective-C基础
  6. 【知识图谱系列】清华大学基于对比学习的图谱预训练模型GCC
  7. 【仿真】Proteus8.9 下载与安装教程(超详细)
  8. 分享一个我做的记账系统(网站)
  9. 货币代码,不允许ALE通讯
  10. 中职计算机教师发言范文话,中职班主任发言稿范文(精选4篇)
  11. sap 流程图 退货销售订单_销售订单_退货型
  12. 号码认证一键免密登录,让验证更简单!
  13. 基于Jenkins和Kubernetes流水线实现应用的自动发版
  14. 影视剧中十大经典反派台词!(来自大洋论坛)
  15. Windows 10 64位系统下Neo4j安装教程(2021.1.13)
  16. Vue3 - props
  17. 远程桌面打开任务管理器
  18. 新手用cdr如何设计名片_新名片设计
  19. 一生的读书计划——影响中国历史进程的中国名人
  20. 条形码控件字体的工具包Code 39 Font Advantage Package

热门文章

  1. java log4j 异步_Log4j2异步日志之异步格式化
  2. 网络配置_CentOS8 网络配置
  3. 使用绑定进行WPF DataGrid格式化的指南
  4. 使用TensorFlow.js的AI聊天机器人三:改进了文本中的情感检测
  5. WPF | 控制库| MultiSelectCombobox
  6. 带有MySQL和Bootstrap的Django 3教程和CRUD示例
  7. mysql jdbc百度_mysql8.0 jdbc连接注意事项
  8. excel三次样条函数_用于数字成像的双三次插值技术?
  9. win10 python免安装_使用Python编写免安装运行时、以Windows后台服务形式运行的WEB服务器...
  10. python派落塔问题_浅析python递归函数和河内塔问题