在我的基于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。关于这个问题,论坛上还有其他类似的问题,但没有一个提到我的情况,其中一个方法接受一个类型而另一个方法接受相同类型的集合。
在得到社区的反馈并自己做一些研究后,我得出结论,让一个端点支持不同类型的操作可能根本就不是RESTful。
我通过为批量操作添加一个单独的端点来解决这个问题:
/api/persons/bulk