Spring Boot 如何在REST API控制器中将请求主体类型转换为所需实体

des4xlb0  于 2022-11-05  发布在  Spring
关注(0)|答案(2)|浏览(209)

我的动机是在REST API中编写一个通用保存方法。用户将在请求正文中发送实体,以便根据请求Map字符串将其转换为实体
为什么我想要这个,因为在我的情况下,有多达50-60个实体,根据我的理解,我必须写许多控制器。
我正在努力实现这样的目标。

@RequestMapping(value = "/{entity}", method = RequestMethod.POST)
@ResponseBody
public Object performSave(@PathVariable String entity
        @RequestBody Object entity)  {

    switch(entity){

             case "employee"
              return employeeService.save((Employee)entity);

             case "Boss"
              return bossService.save((Boss)entity);

              default:
               return null;

             }

但是我不能这样做,因为Spring不能将JSON请求转换为java. lang. Object。
我有甚么可行的解决方法呢?
如果我的问题对你来说没有意义,请让我知道,我会提供更多的细节。
先谢谢你。

izkcnapc

izkcnapc1#

我认为这是不可能的,因为底层的Map器需要json解析到的具体类。参数只是对实际对象的引用。
需要注意的是,当使用REST并从中获得好处时,不仅仅是简单的url可以调用。必须将API设计为RESTfull。我建议您在沿着这条路前进之前先阅读一下这个概念。

4uqofj5v

4uqofj5v2#

它可以只使用一个控制器来完成。一个可能的实现是使用JsonSubTypes和Java继承。
这是通过对扩展抽象类的请求体对象(在最初的问题中是 * 实体 *)进行建模来实现的。控制器方法中的请求体参数将具有抽象类的类型。

相关问题