java - 如何将 JSON 中 Java 对象的实例类型发送到 Java Spring-Server Post 请求?
问题描述
我有一个基类和三个扩展类。例如:
基类:
public BaseClass {
int id;
}
public SubClass extends BaseClass {
int sub1;
}
public SubClass2 extends BaseClass {
int sub2;
}
现在我想向我的 spring 服务器发送一个 json 文件,服务器必须检查它是 SubClass-type 还是 SubClass2-type
@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
}
我除了 BaseClasses 的列表,但尝试将它们转换为特定的子类。我怎样才能做到这一点?以下没有工作。
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");
}
这将需要更复杂的进一步实现,但它会起作用。
希望能帮助到你。
推荐阅读
- html - 带有渐变边框的 CSS 圆角
- flutter - 在 Flutter 应用上播放带有广告的 YouTube 视频
- html - 如何调整导航栏固定元素的宽度
- javascript - 按下待办事项的取消按钮时,它会删除以下所有待办事项,这是我的待办事项的代码
- powershell - 如何在 PowerShell 脚本中将包含空格的参数传递给 Azure CLI 命令
- matplotlib - 绘制几个数字,每个数字都有子图
- dictionary - 重现“致命错误:并发映射读取和映射写入”
- reactjs - 当使用 TypeScript 编译器 API 的类型检查器遇到它们时,React 类型默认为 `any`
- java - Selenium |Maven |失败跟踪|Java.lang.NullpointerException| 第一个测试用例通过后
- debugging - 强制 Visual Studio 调试器在库卸载后保留符号