jsonfield注解不生效(write javabean error fastjson)

@jsonfield看源码它可以作用于字段和方法上。引用网上说的,一、作用field@jsonfield作用在field时,其name不仅定义了输入key的名称,同时也定义了输出的名称。但是我在使用中,发现并不如上所说。例如@jsonfield(name=”project_id”)privatelongprojectid发现bean转json的时候并是”project_id”:xxx的形式,…

大家好,又见面了,我是你们的朋友全栈君。

@jsonfield

看源码它可以作用于字段和方法上。

引用网上说的,

一、作用field

@jsonfield作用在field时,其name不仅定义了输入key的名称,同时也定义了输出的名称。

但是我在使用中,发现并不如上所说。

例如

@jsonfield(name=”project_id”)

private long projectid

发现bean 转json的时候并是”project_id”:xxx的形式,json转bean的时候也不会把”project_id”:xx的内容设置到projectid的里面。

fastjson的版本是1.1.15

二、作用在setter和getter方法上 这种方式倒是在使用的过程当中符合期望。

/**bean 转json 时会把bean中的projectid转换为project_id */

@jsonfield(name=”project_id”)

public long getprojectid() {

return projectid;

}

/**json 转bean 时会把json中的project_id值赋值给projectid*/

@jsonfield(name=”project_id”)

public void setprojectid(long projectid) {

projectid = projectid;

}

三、@jsonfield其它用法,查看@jsonfield注解的源码,除了name可用之外,还有format,serialize,deserialize,serialzefeatures,parsefeatures可用,

•format,貌似用在date类型的字段来格式化时间格式比较有用。

•serialize和deserialize是布尔类型的,用法为

@jsonfield(serialize=false)

private long projectid

就是在序列化的时候就不包含这个字段了。deserialize与之相反。但是有一点需要注意,我看其它地方说,当字段为final的时候注解放在字段上是不起作用的,这时候应该放在get

或set方法上。

•serialzefeatures,我用到这个属性,fastjson默认的序列化规则是当你的字段的值为null的时候,它是不会给你序列化这个字段的,例如我有一个这样的需求,

{“fieldname”:”project_id”,”operator”:”is not”,”value”:null}

一个对象序列化成这样,我的代码如下

criteriavo criteriavo = new criteriavo();

criteriavo.setfieldname(“project_id”);

criteriavo.setoperator(“is not”);

criteriavo.setvalue(null);

默认的它只会序列化为如下结果

{“fieldname”:”project_id”,”operator”:”is not”}

当然fastjson还是允许你控制一下序列化的规则的。

这就用到了serializerfeature,这个一个枚举,里面有好几个值 ,具体的含义大家有兴趣的可以了解一下,

我只是用到了其中一个,

@jsonfield(serialzefeatures=serializerfeature.writemapnullvalue)

private string value;

这样当value的值为null的时候,依然会把它的值序列化出来。也就是下面的样子,这就是我想要的结果

{“fieldname”:”project_id”,”operator”:”is not”,”value”:null}

又遇到了另一个问题,当字段类型为int类型时,如

private int start;

private int limit;

我如果不set值的时候,会序列化为下面这样

“limit”:0,”start”:0

默认为都是0了,而我的目标是如果不设置值的时候,它们不会出现。

我是简单地通过把他们的类型改为integer了。应该有其它通过自定义序列化行为的方式来解决,暂不研究。

以上这篇关于fastjson的@jsonfield注解的一些问题(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持萬仟网。

希望与广大网友互动??

点此进行留言吧!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126678.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月17日 下午4:00
下一篇 2022年4月17日 下午4:00


相关推荐

  • god is a girl歌词_god is a girl上天不公是什么梗

    god is a girl歌词_god is a girl上天不公是什么梗godisagrilRememberingme,discoverandseeAllovertheworld,  记得我在世界上寻找而发现  Shesknownasagirltothosewhoafree,  她是一个想要得到自由的女孩  ThemindshallbekeyForgottenasthepast  思想将被封锁

    2022年10月8日
    9
  • 用AI科研绘图全新升级!借助谷歌新发布模型Nano Banana pro实测一键绘制机制图与技术路线图,直接告别文字乱码与低画质

    用AI科研绘图全新升级!借助谷歌新发布模型Nano Banana pro实测一键绘制机制图与技术路线图,直接告别文字乱码与低画质

    2026年3月15日
    2
  • Telerik的RadControls控件(三)

    Telerik的RadControls控件(三)相信大家学习了RadControl中的RadWindow、RadAjaxManager、RadAjaxLoadingPanel控件后,一定会觉得它是解放.Net技术人员Web开发的技术工具,从而不再为Asp。NET中的局部刷新而绞尽脑汁。  现在我告诉你,前边才仅仅是你发现Web开发更加容易、方便的第一步,通过下来项目中其他常用Rad控件的介绍,你会更加欣喜若狂。好了下来我就介绍另一重量级的控

    2022年7月24日
    12
  • 同相放大器有平衡电阻吗?

    同相放大器有平衡电阻吗?系列文章目录 1 元件基础 2 电路设计 3 PCB 设计 4 元件焊接这个所谓的平衡电阻 需要具体情况具体分析 可能有可能无 不要生搬硬套 根据剃刀法则 如无必要 勿增实体首先是理想运放 理想运放放大的是同向和反向输入端的电压差 最简单的同向放大器如下图 忽略虚线框内的 Rg 理想运放的输入阻抗是无穷大 所以两输入端不会有电流流入流出 这个时候如果同向输入端加入一个平衡电阻 Rg 不会有电流流过 Rg 对整个电路不会有任何影响 所以这个平衡电阻没有意义 是不必要的 再来看看最简单的反

    2025年10月13日
    11
  • C++中的各种进制转换函数汇总

    C++中的各种进制转换函数汇总一 指定格式输出 nbsp 1 在 C 中 按指定进制格式输出如下 printf 05o n 35 nbsp nbsp nbsp nbsp 按八进制格式输出 保留 5 位高位补零 printf 03d n 35 nbsp nbsp nbsp nbsp 按十进制格式输出 保留 3 位高位补零 printf 05x n 35 nbsp nbsp nbsp nbsp 按十六进制格式输出 保留 5 位高位补零 2 在 C 中 按指定进制格式输出如下 include

    2026年3月17日
    1
  • PS如何修复老照片变清晰,PS修复老照片变清晰2种方法

    PS如何修复老照片变清晰,PS修复老照片变清晰2种方法

    2026年3月13日
    2

发表回复

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

关注全栈程序员社区公众号