@JSONField 注解说明

2024-02-28 10:58
文章标签 说明 注解 jsonfield

本文主要是介绍@JSONField 注解说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

导入@JSONField 注解:

import com.alibaba.fastjson.annotation.JSONField;

一、常见用法:

1、指定字段的名称

@JSONField(name="role_name")    
private String roleName;  

2、使用format制定日期格式

public class A {    // 配置date序列化和反序列使用yyyyMMdd日期格式    @JSONField(format="yyyyMMdd")    public Date date;    
}  

3、指定字段的顺序

public static class VO {    @JSONField(ordinal = 3)    private int f0;    @JSONField(ordinal = 2)    private int f1;    @JSONField(ordinal = 1)    private int f2;    

4、使用serialize/deserialize指定字段不序列化

public class A {  @JSONField(serialize=false)  public Date date;  }  

 

 

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

例如

@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")publicvoid 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类型时,如
privateint start;privateint limit;

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

"limit":0,"start":0

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

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

使用fastJSON转化JSON字符串   如果两个对象互相转化数据,如果属性名不统一,可是使用fastJSON的注解

如果使用fastJSON将对象people中的属性和值转换为JSON格式字符串,然后在使用fastJSON将这个字符串中的数据封装到student对象中,这个时候如果people对象和student对象中的属性不同名,

ls:people对象中的age 属性 和student对象中的sage属性,我们可以在people的age属性定义时添加注解@JSONfield(name="sage"),这样使用fastJSON将people对象转换为json字符串后,可以使用fastJSON将 字符串中的数据封装到student中(常用于webservice中使用其他平的接口时接口中相关属性名和自己平台中对象属性名不统一)

 

fastJSON提供的解决方案确实挺好用的,但是people对象以JSON格式向student对象传递数据,但是增强了people对象和student对象相互交换数据的耦合性(就说json格式的数据),但是影响不大,

假如people对象向teacher对象(有属性tage)交换数据已json格式,我们直接使用fastJSON转JSON格式字符串,得到一个字符串类型,然后将相应的sage调用字符串的replace("sage","tage")也可以实现

 

json格式的字符串使用fastJSON封装到对象中是,只对字符串中有的相关属性进行封装,没有的相关属性为null

 

这篇关于@JSONField 注解说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/755298

相关文章

解决JSONField、JsonProperty不生效的问题

《解决JSONField、JsonProperty不生效的问题》:本文主要介绍解决JSONField、JsonProperty不生效的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录jsONField、JsonProperty不生效javascript问题排查总结JSONField

Spring @RequestMapping 注解及使用技巧详解

《Spring@RequestMapping注解及使用技巧详解》@RequestMapping是SpringMVC中定义请求映射规则的核心注解,用于将HTTP请求映射到Controller处理方法... 目录一、核心作用二、关键参数说明三、快捷组合注解四、动态路径参数(@PathVariable)五、匹配请

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

SpringCloud中的@FeignClient注解使用详解

《SpringCloud中的@FeignClient注解使用详解》在SpringCloud中使用Feign进行服务间的调用时,通常会使用@FeignClient注解来标记Feign客户端接口,这篇文章... 在Spring Cloud中使用Feign进行服务间的调用时,通常会使用@FeignClient注解

Java 关键字transient与注解@Transient的区别用途解析

《Java关键字transient与注解@Transient的区别用途解析》在Java中,transient是一个关键字,用于声明一个字段不会被序列化,这篇文章给大家介绍了Java关键字transi... 在Java中,transient 是一个关键字,用于声明一个字段不会被序列化。当一个对象被序列化时,被

Spring Cache注解@Cacheable的九个属性详解

《SpringCache注解@Cacheable的九个属性详解》在@Cacheable注解的使用中,共有9个属性供我们来使用,这9个属性分别是:value、cacheNames、key、key... 目录1.value/cacheNames 属性2.key属性3.keyGeneratjavascriptor

使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案

《使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案》在SpringBoot应用中,我们经常使用​​@Cacheable​​注解来缓存数据,以提高应用的性能... 目录@Cacheable注解Redis时,Redis宕机或其他原因连不上,继续调用原方法的解决方案1

Spring Boot 常用注解整理(最全收藏版)

《SpringBoot常用注解整理(最全收藏版)》本文系统整理了常用的Spring/SpringBoot注解,按照功能分类进行介绍,每个注解都会涵盖其含义、提供来源、应用场景以及代码示例,帮助开发... 目录Spring & Spring Boot 常用注解整理一、Spring Boot 核心注解二、Spr

Java Jackson核心注解使用详解

《JavaJackson核心注解使用详解》:本文主要介绍JavaJackson核心注解的使用,​​Jackson核心注解​​用于控制Java对象与JSON之间的序列化、反序列化行为,简化字段映射... 目录前言一、@jsonProperty-指定JSON字段名二、@JsonIgnore-忽略字段三、@Jso

Spring Boot 常用注解详解与使用最佳实践建议

《SpringBoot常用注解详解与使用最佳实践建议》:本文主要介绍SpringBoot常用注解详解与使用最佳实践建议,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、核心启动注解1. @SpringBootApplication2. @EnableAutoConfi