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注解的一些问题(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持萬仟网。

希望与广大网友互动??

点此进行留言吧!

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)


相关推荐

  • 按位取反计算_c语言按位异或运算符

    按位取反计算_c语言按位异或运算符今天我在看简明Python指南的时候,看到其中一个计算机计算的问题,它是这样描述的:x的按位取反结果为-(x+1)~5输出-6。有关本例的更多细节可以参阅:http://stackoverflow.com/a/11810203看到这儿我就疑惑了,之前在大学中学习的计算机基础课程又还给教材了,hhh…无奈,我只好取网上搜寻解析的答案,而网上的解释说得不太让人明白,自己结合他人的解

  • shell检查语法模式

    shell检查语法模式方法sh-ntest.sh直接上例子

  • 5g端到端网络切片技术_5G网络切片的特征

    5g端到端网络切片技术_5G网络切片的特征1、网络切片的一些概念网络切片(Slice):基于客户化需求,可以被设计、部署、维护的逻辑网络,旨在满足特定的客户、业务、商业场景的业务特点及商业模式。网络切片实例(E2ESliceInstance-ESI):网络切片实例(Instance)是一个临时逻辑网络,跨多个技术域,包含:(1)组网络:”功能”(Function)即虚拟网元(终端、接入网、回传网、核心网、业务网络)及网管系统对应的资源;(2)存储、运算;(3)连接关系。2、网络切片原因:未来业务需求差异

  • DNS服务

    DNS服务

  • 分享一个年化15%以上的无风险套利机会「建议收藏」

    分享一个年化15%以上的无风险套利机会「建议收藏」更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。数字货币期现套利原理数字货币市场,是近期大家关注度相当高的一个市场。在这个市场中,存在着现货交易(数字

  • Java回顾之序列化

    Java回顾之序列化

发表回复

您的电子邮箱地址不会被公开。

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