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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C++实现学生选课管理系统

    C++实现学生选课管理系统这是主函数逻辑部分#include<iostream>#include”class.h”#include”student.h”usingnamespacestd;intmain(){ courseA; studentB[10];//10个学生 intstucnt=0; intdengluflag=-1;…

    2022年10月16日
    2
  • vim命令大全(转)[通俗易懂]

    vim命令大全(转)[通俗易懂]命令历史以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。启动vim在命令行窗口中输入以下命令即可vim直接启动vimvimfilename打开vim并创建名为filename的文件文件命令打开单个文件vimfile同时打开多个文件vimfile1file2file3…在vim窗口中打开一个…

    2022年5月30日
    38
  • 验证二叉搜索树 leetcode_二叉树 面试题

    验证二叉搜索树 leetcode_二叉树 面试题重写equal()时为什么也得重写hashCode()之深度解读equal方法与hashCode方法渊源 原创  2016年05月08日 23:14:19 标签:java equal方法重写 /java /重写equals方法和hashCode方 10077 转载请注明出处: http://blog.csdn.net/javazejian/art…

    2022年8月8日
    7
  • Java IO用法详解

    Java IO用法详解一、javaio概述1.1相关概念JavaIOJavaIO即Java输入输出系统。不管我们编写何种应用,都难免和各种输入输出相关的媒介打交道,其实和媒介进行IO的过程是十分复杂的,这要考虑的因素特别多,比如我们要考虑和哪种媒介进行IO(文件、控制台、网络),我们还要考虑具体和它们的通信方式(顺序、随机、二进制、按字符、按字、按行等等)。Java类库的设计者通过设计大量的类来攻克这些难题…

    2022年5月1日
    51
  • Controlling Broadcasts and Multicasts

    Controlling Broadcasts and Multicasts为什么80%的码农都做不了架构师?>>>…

    2022年6月24日
    23
  • 恐怖的vs2005 sp1安装过程.

    恐怖的vs2005 sp1安装过程.今天刚把这个400多M的sp1从公司拷回来,算计着这样可以省掉不少下载时间.可是,可是,竟然没有想到,安装过程是如此的恐怖.首先,我的C盘空间明显的感到害羞,只有1.5G的剩余空间了,赶

    2022年7月3日
    21

发表回复

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

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