【发布时间】:2015-12-22 09:15:10
【问题描述】:
我有一个名为 Instance 的抽象类,然后是它的两个实现,UserInstance 和 HardwareInstance。我遇到的问题是,当我将 @POST 的其余端点调用到数据库中时,我理想地希望它像 .../rest/soexample/instance/create 一样,其中实例被传递到 REST 端点。如果Instance 不是具有多个实现的抽象,那会很好,但由于我有 2 个,我会收到Jackson.databind 错误。
" 问题:抽象类型要么需要映射到具体类型,要么具有自定义反序列化器,要么使用额外的类型信息进行实例化"
在查找解决方案后,我找到了一个 SO 答案,说我可以使用类似的东西:
@JsonDeserialize(as=UserInstance.class)
但这似乎只有在抽象类有一个实现时才有用。假设我不能调用它两次,因为它无法决定它是哪种类型的实例。
所以我想知道处理这种情况的最佳方法是什么?我应该创建不同的端点吗?喜欢:
.../rest/soexample/userinstance/create & .../rest/soexample/hardwareinstance/create
我不太确定,因为我是一个与 REST 相关的菜鸟,尽管我在积极尝试学习。谢谢!
【问题讨论】:
-
您可以为该抽象类编写一个自定义反序列化程序,它必须根据字段以编程方式解析 JSON,并将正文解析为您想到的任何具体类。
-
感谢您的建议。我以前从未这样做过。我应该在哪里放置自定义解串器?就像我会从
.../rest/soexample/instance/create的端点内部调用它吗? -
REST 是一种非特定类型的应用程序,它并不能告诉我您正在使用什么服务器/客户端技术。我用我想到的解决方案发现了一个与您类似的 SO 问题:stackoverflow.com/questions/8210538/… 我通常会将反序列化器作为您尝试反序列化的对象的公共静态内部类。
标签: java json rest jackson deserialization