首页 > 其他分享 >Jackson常用注解

Jackson常用注解

时间:2023-04-11 17:03:22浏览次数:36  
标签:常用 Jackson jackson 注解 序列化 com annotation fasterxml

目录

Jackson常用注解

序列化注解

@com.fasterxml.jackson.annotation.JsonAnyGetter

此注解只能用在非静态,且无参数的方法之上,且返回的是一个map,如果将此注解打在此方法上,那么返回的map在序列化的时候就像这个类的普通属性一样(就是解除wrap)

    private Map<String, Object> map;

    @JsonAnyGetter
    public Map<String, Object> getMap() {
        return map;
    }

在getMap方法上加上@JsonAnyGetter注解后,返回数据如下

{
    "name": "Jobs",
    "age": 40
}

去掉getMap方法上@JsonAnyGetter注解后,返回数据如下

{
    "map": {
        "name": "Jobs",
        "age": 40
    }
}

@com.fasterxml.jackson.annotation.JsonFormat

用于序列化日期为字符串

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm", locale = "zh_CN", timezone = "Asia/Shanghai")
    private Date createTime;

具体参数用途如下:
1 shape 表明字段序列化后的类型,如 STRING 表示序列化成string的格式,而NUMBER表明序列化成数字类型。
2 pattern 这个不过多的介绍,可以自由的设定序列化的样式
3 locale 这个在序列化的时候指定国际化
4 timezone 指定时区 不指定的话默认是GMT,我们这里设置成GMT+8或是Asia/Shanghai都可以
5 lenient 反序列化时,是否激活严格校验模式。一般保持默认即可。
6 with 可以enable JsonFormat.Feature的特征,会覆盖全局配置
7 without 含义与6相反。

@com.fasterxml.jackson.annotation.JsonGetter

序列化时,@JsonGetter 用于给被序列化的方法命名一个逻辑的属性名,优先级比 @JsonProperty 高。

@com.fasterxml.jackson.annotation.JsonInclude

序列化时,只有当属性值为空时,被去除

    @JsonInclude(value = JsonInclude.Include.NON_NULL)
    private Date createTime;

@com.fasterxml.jackson.annotation.JsonIncludeProperties

序列化时,只序列化指定的属性。

@com.fasterxml.jackson.annotation.JsonPropertyOrder

序列化时,指定属性显示顺序。

@com.fasterxml.jackson.databind.annotation.JsonSerialize

序列化时,用指定的序列化器序列化对象。
因Long类型传输到前端后,JavaScript处理会丢失精度,需转成String字符串类型。

    @JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class)
    private Long id;

反序列化注解

@com.fasterxml.jackson.annotation.JsonAnySetter

此注解只能用在非静态,且两个参数的方法之上。当对方传过来的json串有识别不了的属性时,可以使用一个map将其全部的接收下来

    private Map<String, Object> map;

    @JsonAnyGetter
    public Map<String, Object> getMap() {
        return map;
    }

    @JsonAnySetter
    public void setMap(String key, Object value) {
        if (java.util.Objects.isNull(this.map)) {
            this.map = java.util.Collections.synchronizedMap(new HashMap<>());
        }
        this.map.put(key, value);
    }

在setMap方法上加上 @JsonAnySetter 注解后,前台传过来的参数、值,如果Bean中无对应属性名,则交由map接收

@com.fasterxml.jackson.annotation.JsonAlias

反序列化时,指定一个或多个属性别名。

@com.fasterxml.jackson.annotation.JsonSetter

反序列化时,若参数与对象属性不匹配时,通过 @JsonSetter 绑定

@com.fasterxml.jackson.databind.annotation.JsonDeserialize

反序列化时,使用指定的反序列化器转化对象到目标对象。

通用注解

@com.fasterxml.jackson.annotation.JsonProperty

序列化或反序列化时,指定属性的别名。

@com.fasterxml.jackson.annotation.JsonIgnore

序列化或是反序列化的时候,有些字段不希望被暴露出去,可以使用 @JsonIgnore 注解打在属性上面,这样这个字段在序列化和反序列化的时候就会被忽略掉。

@com.fasterxml.jackson.annotation.JsonIgnoreProperties

如果你觉得在多属性上加 @JsonIgnore 注解比较烦,可以在class上面使用@JsonIgnoreProperties一次性将所有需要忽略的字段都写上就可以了

@com.fasterxml.jackson.annotation.JsonIgnoreType

如果一个class的属性是也是个pojo,你需要全部的ignore掉,那么在这个pojo上面加上 @JsonIgnoreType 注解

标签:常用,Jackson,jackson,注解,序列化,com,annotation,fasterxml
From: https://www.cnblogs.com/javalouvre/p/17306121.html

相关文章

  • 常用字符串处理函数
    1split以某一字符来分割字符串  2substring从第零位截取前五个去掉前六个字符3操作数组 ......
  • 聊聊如何运用JAVA注解处理器(APT)
    什么是APTAPT(AnnotationProcessingTool)它是Java编译期注解处理器,它可以让开发人员在编译期对注解进行处理,通过APT可以获取到注解和被注解对象的相关信息,并根据这些信息在编译期按我们的需求生成java代码模板或者配置文件(比如SPI文件或者spring.fatories)等。APT获取注解及生成代......
  • 【Spring boot】 @Value注解
    一、不通过配置文件的注入属性1.1注入普通字符串直接附在属性名上,在Bean初始化时,会赋初始值@Value("normal")privateStringnormal;1.2注入java系统变量@Value("#{systemProperties['os.name']}")privateStringsystemPropertiesName;//注入操作系统属性1.3注......
  • Java中常用算法及示例-分治、迭代、递归、递推、动态规划、回溯、穷举、贪心
    场景1、分治算法的基本思想是将一个计算复杂的问题分成规模较小、计算简单的小问题求解,然后综合各个小问题,得到最终答案。2、穷举(又称枚举)算法的基本思想是从所有可能的情况中搜索正确的答案。3、迭代法(IterativeMethod)无法使用公式一次求解,而需要使用重复结构(即循环)......
  • Android Debug (调试)注解处理器
     1.addremotedebugconfiguration2.copyjvmoptions:(-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005),andpasteittogradle.propertiesfile.  3.thenclickdebugbuttontoattachlocalhost:5005,expandthegradletasklist......
  • Mybatis_05 注解CRUD
    Mybatis_05注解CRUD1、面向接口编程大家之前都学过面向对象编程,也学习过接口,但在真正的开发中,很多时候我们会选择面向接口编程根本原因:解耦,可拓展,提高复用,分层开发中,上层不用管具体的实现,大家都遵守共同的标准,使得开发变得容易,规范性更好在一......
  • selenium 常用的选择器
    新版本Selenium代码需要引入:fromselenium.webdriver.common.byimportBy选择器也变了,而后做如下修改#inputTag=driver.find_element_by_id("value")#利用ID查找#改为:inputTag=driver.find_element(By.ID,"value")#inputTags=driver.find_element_by_cla......
  • Java常用的算法
    1.给定一个 n 个元素有序的(升序)整型数组 nums和一个目标值 target ,写一个函数搜索 nums 中的target,如果目标值存在返回下标,否则返回-1。classSolution{publicintsearch(int[]nums,inttarget){intlow=0,high=nums.length-1;while(low<=......
  • 常用命令--ADB
    ADB全程:AndroidDebugBridge,常用的androiddebug工具。 1.查看当前的连接设备:adbdevices2.进入到设备:adbshell进入之后使用shell命令,cd、ls,rm等。3.设备有多个,需要指定其中一个设备:adb-s设备名shell4.打开或重启adbadbstart-serveradbreboot5.关闭adb......
  • Servlet注解的使用,简化配置 以及,使用模板方法设计模式优化oa项目
    Servlet注解的使用,简化配置以及,使用模板方法设计模式优化oa项目每博一文案有句谚语说:“一怒之下踢石头,只有痛着脚趾头。”比一件糟糕的事情更可拍的,是你用糟糕的态度去面对它。看过一个很有意思的故事:有个男人清早洗漱的时候,把自己的手表放在了桌子上。他的儿子不小心把手表......