Java MVC REST API中带有Jackson的动态JSON类型 情景

Java MVC REST API中带有Jackson的动态JSON类型 情景,java,json,rest,spring-mvc,jackson,Java,Json,Rest,Spring Mvc,Jackson,我需要构建一个API,为客户端提供对存储在DB中的几种对象的访问(从今天起,我的DAO是基于Hibernate的)。这些可以是GETted或POSTed 当前,GET签名如下: @RequestMapping(value = "/rest/{datatype}", method = RequestMethod.GET, produces = { "application/json" }) public @ResponseBody Objec

我需要构建一个API,为客户端提供对存储在DB中的几种对象的访问(从今天起,我的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对象)
Jackson成功地将JSON转换为对象,但我不知道编译时的对象类型

另一个要求是灵活性:当一个新类被添加到域中时,几乎不需要进行代码工作来支持新的数据类型。在
GET
ter中,我只添加了一个开关来支持新的数据类型,用Spring实例化正确的存储库并查询数据库

问题 我如何编写一个SpringMVCERESTAPI,它接受“任何东西”作为请求体,并允许我从JSON转换为正确的对象?比如:

public void postData(@RequestBody Object objData){
    if (objData instanceof Class1) {
        Class1 obj = (Class1) objData;
        Class1Repository.store(obj);
    }
    [...]
}
可能的答案 (如果您找到更好的解决方案,请提供您的解决方案)

基于相同的框架创建几个简单的API

@RequestMapping(value = "/rest/class1", method = RequestMethod.POST, consumes = { "application/json" })
public void postData(@RequestBody Class1 objOfClass1){
    store(objOfClass1)
}

@RequestMapping(value = "/rest/class2", method = RequestMethod.POST, consumes = { "application/json" })
public void postData(@RequestBody Class2 objOfClass2){
    store(objOfClass2)
}

这样,当SpringMVC分析路径时,它会找到处理请求的正确控制器方法。然后它要求Jackson将请求主体转换为反射检测到的参数类型。

通过路径变量或请求参数获取类名。 为名称查找类。 使用对象映射器将作为链接hashmap的请求主体转换为正确的类