在Spring引导服务中,我有一个如下所示的控制器
@PostMapping
public ApiResponse generateUKLabel(@RequestBody LabelRequestData data){
//do operation
}
在这里,LabelRequestData具有基类的列表。 在请求中,我将子类数据与基类数据一起传递。 但是,Child类数据似乎被忽略了。
有什么方法可以访问子类数据。 我想使具有基类的LabelRequestData通用,以便它可以接受多个子类数据。
有什么办法解决吗?
我尝试过铸造。但是抛出不能抛出异常 我也尝试过泛型。但是然后我需要创建两个控制器方法来处理这些请求。我只需要一种控制器方法来处理请求
@Data
public class LabelRequestData extends BaseRequestData {
@Valid
private List<BaseClass> labelData; // this base class has multiple child classes that i need
@Valid
private PreferenceData preferenceData;
}
答案 0 :(得分:0)
反序列化时,Jackson将不知道必须使用哪个子类,因此它仅采用BaseClass
的值,而忽略ChildClass
您可以在BaseClass中使用@JsonTypeInfo
,这有助于Jackson
识别正确的ChildClass
(您必须在json中添加类型)
我不确定BaseClass
拥有什么,因此我只是在下面假设随机属性。
@Data
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = ChildOne.class, name = "childOne"),
@JsonSubTypes.Type(value = ChildTwo.class, name = "childTwo")})
public class BaseClass {
private Integer id;
}
@Data
public class ChildOne extends BaseClass {
private String name;
}
@Data
public class ChildTwo extends BaseClass {
private String address;
}
如果您请求Json,
{
"labelData": [
{
"id": 0, // -|
"type": "childOne", // |-> This will go to ChildOne.class
"name": "Foo" // _|
}, {
"id": 0, // -|
"type": "childTwo", // |-> This will go to ChildTwo.class
"address": "Somewhere in Earth"// _|
}
]
// Rest of Json
}