首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当包装类也具有@JsonTypeInfo时,@JsonTypeInfo不将"@ class“id添加到json

当包装类也具有@JsonTypeInfo时,@JsonTypeInfo不会将"@class" id添加到json中。@JsonTypeInfo是Jackson库中的一个注解,用于在序列化和反序列化过程中处理多态类型。它允许我们在序列化时将对象的类型信息添加到JSON中,并在反序列化时使用该信息来恢复对象的具体类型。

然而,当包装类也具有@JsonTypeInfo注解时,Jackson库默认情况下不会将"@class" id添加到JSON中。这是因为包装类的类型信息已经通过包装类本身的@JsonTypeInfo注解进行了处理,不需要重复添加到JSON中。

@JsonTypeInfo注解有几个重要的属性,包括use、include、property和visible。其中,use属性用于指定类型信息的使用方式,include属性用于指定类型信息的包含方式,property属性用于指定类型信息在JSON中的属性名,visible属性用于指定类型信息是否可见。

对于包装类,我们可以根据具体的需求来配置@JsonTypeInfo注解的属性。如果需要将包装类的类型信息添加到JSON中,可以设置use属性为JsonTypeInfo.Id.CLASS,并指定一个属性名作为property属性的值。这样,在序列化和反序列化过程中,就会将包装类的类型信息添加到JSON中。

以下是一个示例代码:

代码语言:java
复制
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "type")
public class Wrapper {
    private Object data;

    // getter and setter
}

public class Main {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        Wrapper wrapper = new Wrapper();
        wrapper.setData("Hello World");

        String json = objectMapper.writeValueAsString(wrapper);
        System.out.println(json);
        // Output: {"type":"com.example.Wrapper","data":"Hello World"}

        Wrapper deserializedWrapper = objectMapper.readValue(json, Wrapper.class);
        System.out.println(deserializedWrapper.getData());
        // Output: Hello World
    }
}

在上述示例中,我们将包装类Wrapper的类型信息添加到JSON中,并指定属性名为"type"。在序列化时,会生成包含类型信息的JSON字符串;在反序列化时,会根据类型信息恢复对象的具体类型。

对于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,无法给出具体的推荐。但可以根据具体的需求和场景,选择适合的云计算产品和服务来满足需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Jackson父子类多态处理(注解实现)

contentType", visible = true) use:定义使用哪一种类型识别码,它有下面几个可选值: 枚举值 作用 JsonTypeInfo.Id.CLASS 使用完全限定名做识别 JsonTypeInfo.Id.MINIMAL_CLASS...若基和子类在同一包,使用名(忽略包名)作为识别码 JsonTypeInfo.Id.NAME 一个合乎逻辑的指定名称 JsonTypeInfo.Id.CUSTOM 自定义识别码,由@JsonTypeIdResolver...作为扩展属性 JsonTypeInfo.As.WRAPPER_OBJECT 作为一个包装的对象 JsonTypeInfo.As.WRAPPER_ARRAY 作为一个包装的数组 property(可选...):制定识别码的属性名称: 此属性只有当: use为JsonTypeInfo.Id.CLASS(若不指定property则默认为@class)、JsonTypeInfo.Id.MINIMAL_CLASS...> aClass) { //有出现同名可以用这个来做区别 JsonTypeName annotation = aClass.getAnnotation(JsonTypeName.class

2.4K40

Jaskson精讲第7篇-JsonTypeInfo注解在继承关系下的使用

它提供了很多的JSON数据处理方法、注解,包括流式API、树模型、数据绑定,以及复杂数据类型转换等功能。...三、@JsonTypeInfo注解加到父定义上 为了解决上面的这种继承关系对象的反序列化出现的问题,jackson为我们提供了JsonTypeInfo注解,把它加在父定义上面即可。...@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) public class ClsShape { } 在父定义上面加上@JsonTypeInfo注解之后,序列化与反序列化的输出结果如下...四、@JsonTypeInfo注解加到包含父的成员变量上面 @JsonTypeInfo注解不仅可以加在父的定义上面,可以加到包含父的成员变量上面。...@Data public class ClsView { @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) private List shapes

2.9K10
  • 如何通过Jackson注解@JsonTypeInfo解决多态反序列化问题?

    它提供了很多的JSON数据处理方法、注解,包括流式API、树模型、数据绑定,以及复杂数据类型转换等功能。它虽然简单易用,但绝对不是小玩具。...本篇主要介绍一下最近遇到的一个问题,在Java 继承的情况下如何实现父及子类的JSON序列化与反序列化。...值得注意的是在序列化之后的java字符串中,每个Json对象都包含了一个新的属性@class,这也是该对象在继承关系下能够反序列化为正确的java对象(@class的值的对象)的关键所在。...@JsonTypeInfo注解加到包含父的成员变量上面 @JsonTypeInfo注解不仅可以加在父的定义上面,可以加到包含父的成员变量上面。序列化和反序列化的结果和上面内容是一样的。...如果该注解同时作用在和属性上,则以使用在属性上的注解为准,因为它被认为更具体。 需要特别说明的是,@JsonTypeInfo在属性(字段,方法)上使用时,此注解适用于值。

    4.8K10

    在Scala项目中使用Spring Cloud

    SpringApplication.run(classOf[SqlEngineApplication], args: _*) } 注意,Spring Cloud以及Spring Boot提供的annotation是运用在上面的...} Json的序列化 添加依赖 Spring Boot使用Jackson作为Json的序列化支持,若要在Scala项目也要使用Jackson,则需要添加jackson对scala的支持模块: <dependency...要支持这种Json的多态,则必须在抽象类型ConditionExpression上添加如下annotation: @JsonTypeInfo( use = JsonTypeInfo.Id.NAME,...ConditionExpression { def evaluate: String } 即使ConditionGroup与Condition子类没有定义type属性,在对应的Json结构中需要添加...; @JsonIgnoreProperties(ignoreUnknown = true) @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY

    1.7K50

    Spring Cloud Bus中的事件的订阅与发布(一)

    Spring Cloud提供了AMQP 传输的代理和Kafka启动Starters,对具有相同的基本功能集的其他传输组件的支持,在未来的规划中。...1@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type") //序列化时使用子类的名称作为type 2@JsonIgnoreProperties...另外,注解@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")对应于序列化时,使用子类的名称作为type;而@JsonIgnoreProperties...1@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type") 2@JsonIgnoreProperties("source") 3public...该事件与之前的SentApplicationEvent、AckRemoteApplicationEvent有关,序列化时遇到事件的类型转换异常,则自动构造成一个未知的远端应用事件。

    1.8K100

    Jackson常用注解详解1 初级2 中级

    注意 下面的例子仅仅显示了成员属性,注解同样可以用在成员方法(getter/setter)上 ①属性重命名使用的注解 最常见的使用方式之一就是改变某个成员属性所使用的JSON名称,例如: public...value; } ③选择更多/更少指定类型使用的注解 在有些情况下,Jackson在读入或输出一个成员属性,所选用的类型可能并不是你想要的: 读取(反序列化),声明的类型可能是一个基本类型...(typing=Typing.STATIC) public BasicType another; } 2 中级 ①使用构造器或工厂方法 在默认情况下,JSON数据创建相应的实例,Jackson...我们可以通过在“基本类型”上添加@JsonTypeInfo注解来完成操作: //将Java的名称(“com.myempl.ImplClass”)存储到JSON的一个名称为“class”的属性中 @JsonTypeInfo...(use=Id.CLASS, include=As.PROPERTY,property=”class”) public abstract class BaseClass { } public class

    1.5K61

    用了几年的 Fastjson,我最终替换成了Jackson!

    jackson1是已经过时的框架,因此可以忽略,cheshire和json-simple排名尚且不如fastjson,忽略,剩余jackson2、gson以及org.json,其中org.json的使用量...如果根据其他typeName等方式无法找到正确的子类,默认使用的子类,等价于jackson的@JsonTypeInfo.defaultImpl() Class mappingTo() default Void.class; // 反序列化时指定java bean builder(必须是@JSONPOJOBuilder注解的),等价于jackson...() default ""; // 反序列化某个接口或抽象或父的子类指定根据哪个字段的值和子类的typeName相等来决定具体实现,等价于jackson的@JsonTypeInfo.use...() = Id.CUSTOM + @JsonTypeInfo.property() String typeKey() default ""; // 反序列化某个接口或抽象或父的子类指定可以反序列化的子类类型

    5.2K10

    用了几年的 Fastjson,最终替换成了 Jackson!

    排名尚且不如 fastjson,忽略,剩余 jackson2、gson 以及 org.json,其中 org.json 的使用量 (usage) 远小于 jackson2(方便起见,下文均以 jackson...均指代 jackson2)和 gson,因此 org.json 可以排除了。...如果根据其他typeName等方式无法找到正确的子类,默认使用的子类,等价于jackson的@JsonTypeInfo.defaultImpl() Class<?...typeName() default ""; // 反序列化某个接口或抽象或父的子类指定根据哪个字段的值和子类的typeName相等来决定具体实现,等价于jackson的@JsonTypeInfo.use...() = Id.CUSTOM + @JsonTypeInfo.property() String typeKey() default ""; // 反序列化某个接口或抽象或父的子类指定可以反序列化的子类类型

    2.2K30

    jackson序列化和反序列化中的注解和扩展点大全【收藏】

    它的作用是指定在将对象转换为 JSON 字符串是否包含属性值为 null 的字段。 @JsonInclude 注解可以应用在级别或属性级别上。...7.1 级别的 @JsonInclude 注解 当应用在级别上,@JsonInclude 注解指示了默认的 null 处理策略,该策略会应用到整个的所有属性上。...Getter and Setter methods } 上述代码中,使用 @JsonAlias 注解指定了 name 和 fullName 这两个别名, JSON 数据中包含这两个键,它们都会与...示例代码: @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type"...这意味着被 @JsonIgnoreType 注解的类型将会被完全忽略,不会被包含在最终生成的 JSON 中,不会被用于反序列化。

    2.3K10

    .NET 6+ 中的源生成器诊断

    SYSLIB1005 找不到所需的类型定义 SYSLIB1006 多个日志记录方法不能在中使用相同的事件 ID SYSLIB1007 日志记录方法必须返回 void SYSLIB1008 日志记录方法的参数之一必须实现...源生成器未生成类型的序列化元数据 SYSLIB1031 System.Text.Json 源生成器遇到重复的 JsonTypeInfo 属性名称 SYSLIB1032 System.Text.Json...源生成器遇到非分部的上下文类 SYSLIB1033 System.Text.Json 源生成器遇到具有多个 [JsonConstructor] 注释的类型 SYSLIB1035 System.Text.Json...源生成器遇到具有多个 [JsonExtensionData] 注释的类型 SYSLIB1036 System.Text.Json 源生成器遇到无效的 [JsonExtensionData] 注释 SYSLIB1037...System.Text.Json 源生成器遇到具有仅初始化属性的类型,这些属性不支持反序列化 SYSLIB1038 System.Text.Json 源生成器遇到使用 [JsonInclude] 注释的属性

    56620
    领券