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

时间:2018-02-22 13:14:46

标签: java spring rest spring-mvc

在我的基于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。关于这个问题在论坛上还有其他类似的问题,但没有一个提到我的情况,其中一个方法接受一个类型而另一个方法接受相同类型的集合。

1 个答案:

答案 0 :(得分:0)

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

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

/api/persons/bulk