如何将列表发布到Spring Data Rest?

Jim*_*m C 14 java rest spring spring-mvc spring-data-rest

我按照这个例子,它允许发布一个唯一的Person对象.我想一个REST服务,我可以张贴的集合Person一次,如列表/名为任何集合Team众多Person只在一个通话对象.

我的意思是,我的问题并不完全是关于OneToMany你在REST请求中发送每个人的关系.本主题很好回答.

我想发送一组Person利用@RepositoryRestResourceSpring Data Rest的其他功能的对象.这是否可以使用Spring Data Rest或者我应该通过创建控制器来解决,接收列表并解析Team列表以插入每个Person

我发现了这个功能请求,似乎回答说现在Spring Rest Data缺少我想要的东西,但我不确定.

在我的业务需求中,应用程序A会将一个订单列表发布到应用程序B,我必须将其保存在数据库中以供将来处理,因此,在阅读了Spring Data Rest并制作了一些示例后,我发现它的干净架构非常棒且非常适合对于我的要求,除了我没有弄清楚如何发布列表的事实.

use*_*095 13

那么,AFAIK你不能用Spring数据休息那样做,只需阅读文档,你会看到,没有提到将列表发布到集合资源.

其中的原因尚不清楚,但一方面 - REST本身并未真正指定您应如何进行批处理操作.所以不清楚应该如何处理该功能,比如你应该将列表发布到收集资源吗?或者,您是否应该导出资源/someentity/batch,以便能够在一个批次中修补,删除和添加实体?如果你要添加列表,你应该如何返回ID?对于单个POST到集合,spring-data-rest在Location头中返回id.对于批量添加,这是不可能的.

这并不能证明spring-data-rest缺少批处理操作.他们应该实施这个恕我直言,但至少它可以帮助理解为什么他们可能会错过它.

我可以说的是,你总是可以将你自己的Controller添加到可以正确处理/ someentity/batch的项目中,你甚至可以从中创建一个库,这样你就可以在另一个项目中使用它.或者甚至fork spring-data-rest并添加此功能.虽然我试图了解它是如何工作的并且到目前为止失败了.但你可能知道这一切,对吧?

有一个功能要求.


Kha*_*ela 5

根据user1685095的 答案,您可以制作自定义控制器PersonRestController并公开帖子,collection of Person因为它似乎尚未公开。Spring-date-rest

@RepositoryRestController
@RequestMapping(value = "/persons")
public class PersonRestController {
private final PersonRepository repo;
@Autowired
public AppointmentRestController(PersonRepository repo) {
    this.repo = repo;
}

@RequestMapping(method = RequestMethod.POST, value = "/batch", consumes = "application/json", produces = "application/json")
public @ResponseBody ResponseEntity<?> savePersonList(@RequestBody Resource<PersonWrapper<Person>> personWrapper,
        PersistentEntityResourceAssembler assembler) {
    Resources<Person> resources = new Resources<Person>(repo.save(personWrapper.getContent()));
    //TODO add extra links `assembler`
    return ResponseEntity.ok(resources);
}
Run Code Online (Sandbox Code Playgroud)

}

要修复的PersonWrapper

无法以[来源:java.io.PushbackInputStream@3298b722; 行:1,列:1]

更新资料

public class PersonWrapper{
 private List<Person> content;

public List<Person> getContent(){
return content;
}

public void setContent(List<Person> content){
this.content = content;
}
}

public class Person{
private String name;
private String email;
// Other fields

// GETTER & SETTER 
}
Run Code Online (Sandbox Code Playgroud)