首页 > 其他分享 >Jackson注释—官方原版

Jackson注释—官方原版

时间:2023-04-06 21:37:09浏览次数:32  
标签:Jackson name 注释 String 原版 序列化 public 属性


 本页列出了所有通用的 Jackson 2.0 注释,按功能分组

一、属性命名

@JsonProperty(也表示要包含属性)用于指示外部属性名称、数据格式中使用的名称(JSON或其他支持的数据格式之一)

  • @JsonProperty.value:要使用的名称
  • @JsonProperty.index:如果数据格式(而不是JSON)是基于索引的,则要使用的物理索引
  • @JsonProperty.defaultValue:定义为元数据的文本默认值。注意:核心数据绑定不使用此值;它目前只暴露于扩展模块。
public class MyBean {
    public int id;
    private String name;

    @JsonProperty("name")
    public void setTheName(String name) {
        this.name = name;
    }

    @JsonProperty("name")
    public String getTheName() {
        return name;
    }
}

Jackson注释—官方原版_反序列化

二、属性包含

@JsonAutoDetect:用于重写属性内省定义的类注释。

使用不同属性的不同访问器类型的设置:

  • creatorVisibility,用于将构造函数检测为Creator方法(以及少量“众所周知”的静态工厂方法,如valueOf())
  • fieldVisibility用于检测Java对象字段
  • getterVisibility用于检测“getters”:没有参数值返回名称以“get”前缀开头的方法
  • isGetterVisibility用于检测boolean/boolean返回,名称以“is”前缀开头的无参数方法
  • setterVisibility用于检测“setters”:单参数采用名称以“set”前缀开头的方法

所有属性都使用Visibility级别作为值:

  • ANY:无论其可见性如何,都会自动检测到隐含类型的访问器
  • NON_PRIVATE:如果隐含类型的访问器的可见性不是private,则会自动检测到该访问器
  • PROTECTED_AND_PUBLIC:如果隐含类型的访问器是 public or protected,则会自动检测到该访问器
  • PUBLIC_ONLY:仅当隐含类型的访问器是public时才自动检测到它
  • NONE:从未自动检测到隐含类型的访问器
  • DEFAULT:表示“使用全局默认值”的伪值(也是上述注释属性的默认值)

@JsonIgnore:用于忽略指定属性的简单注释:

  • 只需要添加到访问器/突变器之一(字段、getter/setter、构造函数参数),但会对“whole”属性产生影响:也就是说,向“getter”添加注释也会禁用“setter”
  • ...除非 “setter” 有 ,在这种情况下,这被认为是一个启用了 “setter” 但没有 “getter” 的“拆分属性”(“只读”,因此属性可以从输入中读取,但不是写入输出)@JsonProperty

@JsonIgnoreProperties:每个类的注释,用于列出要忽略的属性,或指示要忽略任何未知属性。

  • 序列化时,忽略列出的属性@JsonIgnoreProperties({"prop1", "prop2"})
  • 在反序列化时,忽略没有 getter/setter 的属性@JsonIgnoreProperties(ignoreUnknown=true)

@JsonIgnoreType:每个类的批注,指示要忽略批注类型的所有属性。

@JsonInclude:用于定义序列化时是否不应包含某些“非值”(null 或空值)的注释;可以基于每个属性使用,也可以用于类的默认值(用于类的所有属性)

属性文档、元数据

  • @JsonPropertyDescription(在 2.3 中添加):用于为逻辑属性定义人类可读描述的注释。
  • 不由核心数据绑定使用,但由 JSON 架构生成器用于在架构中添加说明。

反序列化和序列化详细信息

  • @JsonFormat:具有每类型行为的常规注释;例如,可用于指定序列化日期/时间值时要使用的格式。
  • lenient(布尔值)
  • locale(字符串)
  • pattern(字符串)
  • shape (Shape)
  • timezone(字符串)
  • with (JsonFormat.Feature[])
  • without (JsonFormat.Feature[])
  • @JsonUnwrapped:与 POJO 结构相比,用于定义该值的属性注释在序列化时应“解包”(反序列化时应再次包装),从而导致数据结构扁平化。
  • @JsonView:用于定义视图的属性注释,其中属性将包含在序列化、反序列化中。
public class EventWithFormat {
    public String name;

    @JsonFormat(
      shape = JsonFormat.Shape.STRING,
      pattern = "dd-MM-yyyy hh:mm:ss")
    public Date eventDate;
}

Jackson注释—官方原版_JSON_02

反序列化详细信息

  • @JacksonInject:注释,指示属性应通过“注入”而不是从数据 (JSON) 获取其值。
  • @JsonAnySetter:用于将双参数方法定义为“any setter”的注释,用于反序列化其他未映射的 JSON 属性的值
  • @JsonCreator:用于指示应在反序列化期间使用构造函数或静态工厂方法创建值实例的注释。
  • @JsonSetter:替代@JsonProperty,用于标记指定的方法是“二传手方法”

    我们将指定方法s etTheName() 作为 MyBean 实体中 name 属性的 setter

public class MyBean {
    public int id;
    private String name;

    @JsonSetter("name")
    public void setTheName(String name) {
        this.name = name;
    }
}

Jackson注释—官方原版_序列化_03

  • @JsonEnumDefaultValue(在 2.8 中添加):用于在反序列化未知枚举值时定义默认值的注释。需要启用配置功能

序列化详细信息

@JsonAnyGetter:用于将getter定义为“any getter”的注释,该注释返回java.util.Map,其内容将序列化为JSON对象的附加财产,以及对象可能具有的常规财产。

public class ExtendableBean {
    public String name;
    private Map<String, String> properties;

    @JsonAnyGetter
    public Map<String, String> getProperties() {
        return properties;
    }
}

Jackson注释—官方原版_反序列化_04

@JsonGetter:替代@JsonProperty,用于标记指定的方法是“getter方法”

public class MyBean {
    public int id;
    private String name;

    @JsonGetter("name")
    public String getTheName() {
        return name;
    }
}

Jackson注释—官方原版_JSON_05

@JsonPropertyOrder:用于指定财产序列化顺序的注释

@JsonPropertyOrder({ "name", "id" })
public class MyBean {
    public int id;
    public String name;
}

Jackson注释—官方原版_序列化_06

@JsonRawValue:每个属性标记,可用于指定属性的值将按原样“精确”包含在序列化中,没有转义或修饰——对于在输出中嵌入预序列化的JSON(或使用的任何数据格式)很有用

public class RawBean {
    public String name;

    @JsonRawValue
    public String json;
}

Jackson注释—官方原版_JSON_07

@JsonValue:每个属性标记,指示POJO应该使用属性的值进行序列化,通常是java.lang.String(类似annotation to String()方法)

public enum TypeEnumWithValue {
    TYPE1(1, "Type A"), TYPE2(2, "Type 2");

    private Integer id;
    private String name;

    // standard constructors

    @JsonValue
    public String getName() {
        return name;
    }
}

Jackson注释—官方原版_序列化_08

@JsonRootName:类注释,用于指示用于根值的“包装器”条目的名称,如果启用了根包装

@JsonRootName(value = "user")
public class UserWithRoot {
    public int id;
    public String name;
}

Jackson注释—官方原版_反序列化_09

类型处理

@JsonSubTypes:类注释,用于指示注释类型的子类型;使用逻辑类型名(而不是类名)反序列化多态类型时必需
@JsonTypeId:属性注释,用于指示属性值应用作对象的类型Id,而不是使用类名或外部类型名。
@JsonTypeInfo:类/属性注释,用于指示序列化中包含哪些类型信息以及如何包含的详细信息。
@JsonTypeName:类注释,用于定义要用于注释类的逻辑类型名称;类型名称可以用作类型Id(取决于@JsonTypeInfo的设置)

public class Zoo {
    public Animal animal;

    @JsonTypeInfo(
      use = JsonTypeInfo.Id.NAME, 
      include = As.PROPERTY, 
      property = "type")
    @JsonSubTypes({
        @JsonSubTypes.Type(value = Dog.class, name = "dog"),
        @JsonSubTypes.Type(value = Cat.class, name = "cat")
    })
    public static class Animal {
        public String name;
    }

    @JsonTypeName("dog")
    public static class Dog extends Animal {
        public double barkVolume;
    }

    @JsonTypeName("cat")
    public static class Cat extends Animal {
        boolean likesCream;
        public int lives;
    }
}

Jackson注释—官方原版_反序列化_10

对象引用,标识

@JsonManagedReference,@JsonBackReference:一对注释,用于指示和处理用一对匹配的财产表示的父/子关系
@JsonIdentityInfo:类/属性注释,用于指示在序列化/反序列化值时要使用对象标识,以便可以正确地反序列化对单个Java对象的多个引用。这可以用来正确处理循环对象图和有向无循环图。

元注释

此组包括用于其他注释的注释。

  • @JacksonAnnotation:添加到所有Jackson定义的注释中的标记注释(包括此包中包含的所有其他注释)
  • @JacksonAnnotationsInside:标记的注释,用于指示自定义注释包含Jackson注释;用于允许“注释束”,即使用Jackson注释进行注释的自定义注释(为什么?允许只添加一个注释来表示一组多个Jackson注释)

Use with JAX-RS (DropWizard, Jersey)

尽管值注释可以在 Jackson 本身所在的任何地方使用,但无需额外的工作,但在 JAX-RS 容器上使用 Jackson 时,还需要考虑一些其他事项。 此类容器需要使用 Jackson JAX-RS 提供程序(或等效的胶水实现来注册 Jackson 以在外部格式(如 JSON 和 POJO)之间转换内容)。

一个特定的限制是,尽管 Jackson 可以从它传递的值中自省批注,但它不能直接访问资源方法上的批注。但是,提供程序将获得这些定义,并且它可以使用某些注释。

有关更多信息,请查看 JAX-RS 提供程序 wiki,但简短的说法是,在某种程度上支持以下注释:

  • @JsonView:适用于返回值(方法注释)和输入参数(参数注释)
  • @JsonRootName:类似适用于返回值和输入值。
  • @JacksonAnnotationsInside:完全支持,因此您可以创建和使用“注释包”
  • @JacksonFeature:JAX-RS 提供程序特定的注释(未包含在 中)允许为端点启用/禁用 s 和 sjackson-annotationsSerializationFeatureDeserializationFeature

另请注意,注释不是共享的(即,反序列化程序不是传递方法注释;序列化程序也不是传递的参数注释),因此在某些情况下,您可能需要违反 DRY 原则并添加重复的注释

大家好,我是Doker品牌的Sinbad,欢迎点赞和评论,您的鼓励是我们持续更新的动力!欢迎加微信进入技术群聊! 


标签:Jackson,name,注释,String,原版,序列化,public,属性
From: https://blog.51cto.com/Doker/6174163

相关文章

  • pycharm创建文件时自动生成注释
    参考:https://blog.csdn.net/weixin_52696285/article/details/128498933 File----Settings-----FileandCodeTemplates-----PythonScript写入如下模板:'''@Project:${PROJECT_NAME}@File:${NAME}.py@IDE:${PRODUCT_NAME}@Author:雨薇@Date:${D......
  • VS2012、VS2013、VS2015、VS2019 代码自动注释插件【2】
    Git代码自动注释工具源码地址 VS2010、VS2012、VS2013的代码自动注释插件。安装该插件后,可以在VS的菜单中显示“注释”主菜单,可以给类、函数、成员添加标准的注释,与Doxygen配合使用,可以直接生成项目的注释文档。【插件下载】高版本的VS,可以下载源码后,自行编译使用。【插件安装】......
  • 注释/关键字/常量/数据类型/变量/标识符/类型转换
                                        ......
  • KEIL——添加自己的注释模板
    【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来!《QT开发实战》《嵌入式通用开发实战》《从0到1学习嵌入式Linux开发》《Android开发实战》《实用硬件方案设计》 长期持续带来更多案例与技术文章分享;欢迎商业项目咨询,10年+软硬全栈内功,助力解决您的尊贵需求。......
  • IDEA设置自动生成模板类和方法注释
    IDEA设置自动生成模板类和方法注释一、模板类注释在右侧粘贴如下代码:/***@BelongsProject:${PROJECT_NAME}*@BelongsPackage:${PACKAGE_NAME}*@Author:chuanwei.yang42624*@CreateTime:${YEAR}-${MONTH}-${DAY}${HOUR}:${MINUTE}*@Description:TODO*@Version:1......
  • 如何编写高质量的 JS 函数(2) -- 命名/注释/鲁棒篇
    vivo互联网技术微信公众号 作者:杨昆上篇《如何编写高质量的JS函数(1)--敲山震虎篇》介绍了函数的执行机制,此篇将会从函数的命名、注释和鲁棒性方面,阐述如何编写高质量的JS函数。(一)函数命名一、目前前端的函数命名存在什么问题从上图可以知道,命名和缓存是计算机科学中的......
  • 记一次springboot通过jackson渲染到前端,出现大写字母变成小写问题
    前言最近业务部门接手了外包供应商的项目过来自己运维,该部门的小伙伴发现了一个问题,比如后端的DTO有个属性名为nPrice的字段,通过json渲染到前端后,变成nprice,而预期的字段是要为nPrice。于是他们就找到我们部门,希望我们能帮忙解决一下这个问题,本文就聊聊如何解决问题,至于为什么会......
  • Springboot JSON整合—官方原版
    SpringBoot提供与三个JSON映射库的集成:GsonJacksonJSON-BJackson是首选和默认库。一、Jackson提供了Jackson的自动配置,Jackson是springbootstarterjson的一部分。当Jackson在类路径上时,会自动配置一个ObjectMapperbean。提供了几个配置财产,用于自定义ObjectMapper的配置。1.......
  • VSCODE 主题 Noctis 删除多余的子主题 和 取消注释斜体
    最近觉得VSCODE的Noctis主题原版的配色很搭,挺养眼的。Noctic原皮预览:但是其他附带的主题不是太喜欢,另外注释也是个人不太喜欢的斜体(英文斜体还好,中文斜体真有点丑)。于是想改一下。取消注释找到下载主题路径,修改json文件:我的路径为:C:\Users\Administrator.vscode\e......
  • idea类/方法注释设置
    类:#if(${PACKAGE_NAME}&&${PACKAGE_NAME}!="")package${PACKAGE_NAME};#end#parse("FileHeader.java")/***${NAME}**@description:接口处理*@author:${USER}*@date:${DATE}${TIME}*/publicclass${NAME}{}方法:****$param$......