我有一个基类和三个扩展类。例如:
BaseClass:
public BaseClass {
int id;
}
public SubClass extends BaseClass {
int sub1;
}
public SubClass2 extends BaseClass {
int sub2;
}
现在我想将json文件发送到我的spring服务器,并且该服务器必须检查它是SubClass类型还是SubClass2类型
@PostMapping(value = "/test", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> create(@RequestBody List<BaseClass> entry);
发送JSON:
{
"id": 1,
"sub1": 1
},
{
"id": 2,
"sub2": 2
}
除了基类列表之外,我尝试将它们强制转换为特定的子类。我怎样才能做到这一点?以下操作无效。
if (abc instanceof SubClass) {
log.info("abc is instance of SubClass");
} else if (abc instanceof SubClass2) {
log.info("abc is instance of SubClass2");
}
如果您接受BaseClass
,Spring会将您的json映射为仅与BaseClass
兼容,而忽略所有其他字段。因此您对子类的检查将完全无效。
最简单的解决方案是将数据接受为纯文本,然后手动尝试使用GSON或类似的东西将其映射到您的模型中>]
new Gson().fromJson("{ "id": 1, "sub1": 1 }", SubClass.class);
但是这是处理此问题的坏方法。您的方法需要在体系结构上进行更改。最简单的方法是像这样向您的模型引入
data
字段
{ "id": 1, "data": { "key": "sub1", "value": 1 }, },
public Data { String key; int value } public BaseClass { int id; Data data; }
这样您将可以检查
if (abc.data.key.equals("sub1")) { log.info("abc is sub1"); } else if (abc.data.key.equals("sub1")) { log.info("abc is sub2"); }
这将需要更复杂的进一步实现,但是它将起作用。
希望有帮助。