场景
我需要构建一个 API,为客户端提供对存储在数据库中的多种对象的访问权限(我的 DAO 是基于 Hibernate 的今天)。这些可以GET
ted 或POST
ed。
目前GET
签名如下:
@RequestMapping(value = "/rest/{datatype}", method = RequestMethod.GET, produces = { "application/json" })
public @ResponseBody
Object[] getData(@PathVariable("datatype") String dataType,
WebRequest request) throws HttpException {
这意味着根据 URL 中的数据类型,我将访问给定的存储库并返回我的业务域的对象。到目前为止它工作正常。
对于POST
,我必须能够提交 JSON 格式的对象,将其转换为类并将其存储到数据库中。
显然,如果我使用postFunfData(SpecificDataType object)
Jackson 成功将 JSON 转换为对象,但我在编译时不知道对象类型。
另一个要求是灵活性:当一个新类被添加到域中时,需要做很少的代码工作来支持新的数据类型。在GET
第三节中,我只是添加了一个开关来支持新的数据类型,使用 Spring 实例化正确的存储库并查询数据库。
问题
如何编写一个 Spring MVC REST API 接受“任何东西”作为请求主体并允许我从 JSON 转换为正确的对象?就像是:
public void postData(@RequestBody Object objData){
if (objData instanceof Class1) {
Class1 obj = (Class1) objData;
Class1Repository.store(obj);
}
[...]
}