gpt4 book ai didi

java - Spring Boot Jackson Databind - 配置继承

转载 作者:行者123 更新时间:2023-12-02 11:12:35 24 4
gpt4 key购买 nike

假设我有一个基类A:

public class A {
public String a;
}

还有两个子类BC:

public class B extends A {
public String b;
}

public class C extends A {
public String c;
}

以及A类的包装:

public class Wrapper {
public A a;
}

我有 Rest Controller ,它接收客户端请求作为包装对象:

@RestController
public class SomeController {

public void foo(@RequestBody Wrapper wrapper) {}

}

问题在于 Jackson 将包装字段转换为基类 A

如何配置它以接收正确的类型?

最佳答案

使用类型信息注释您的基类 A,告诉 Jackson 如何决定给定的 json 对象是否应该反序列化为 B.java 还是 C.java .

例如:通过下面的代码,我们告诉 Jackson A.class 的 json 对象将包含一个带有键 type 的属性,其值可以是“b”或“c”。如果值为“b”,则将对象反序列化为B.class,否则将其反序列化为C.class

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")  
@JsonSubTypes({
@Type(value = B.class, name = "b"),
@Type(value = B.class, name= "c")
})
class A {
}

以下是您应该使用的 json。

{
"a" : { // This will be deserialized to B.class
"type": "b",
// field of B.class
}
}



{
"a" : { // This will be deserialized to C.class
"type": "c",
// field of C.class
}
}

关于java - Spring Boot Jackson Databind - 配置继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50520334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com