端点接受对象和同一对象集合的相同映射

问题描述 投票:0回答:1

在我的基于Spring的REST API中,我想在创建一个新资源时使用相同的端点来创建多个新资源。

换句话说,我希望能够发布两者

{
  name: John
}

[
  {
    name: John
  },
  {
    name: Peter
  }
]

到同一个端点/api/persons

因此,在我的Spring控制器中,我希望将两个方法映射到同一路径,但接受不同的参数:

@RequestMapping("/clases")
public class PersonController {
  @Autowire
  private PersonService personService;

  @RequestMapping(method = RequestMethod.POST)
  public Person createPerson(@RequestBody Person person) {
    return personService.create(person);
  }

  @RequestMapping(method = RequestMethod.POST)
  public Set<Person> createPersons(@RequestBody Set<Person> persons) {
    return personService.create(persons);
  }
}

这会导致Spring在启动期间因端点的模糊映射而抛出异常。人们希望Spring可以在运行时区分这些方法,具体取决于发布到端点的内容,但似乎并非如此。

由于这是RESTful设计中非常常见的模式,我希望有一个我想念的解决方案。在那儿?或者有任何解决方法吗?

PS。关于这个问题,论坛上还有其他类似的问题,但没有一个提到我的情况,其中一个方法接受一个类型而另一个方法接受相同类型的集合。

java spring rest spring-mvc
1个回答
0
投票

在得到社区的反馈并自己做一些研究后,我得出结论,让一个端点支持不同类型的操作可能根本就不是RESTful。

我通过为批量操作添加一个单独的端点来解决这个问题:

/api/persons/bulk

© www.soinside.com 2019 - 2024. All rights reserved.