繁体   English   中英

如何将请求对象转换为Spring Webflux模型

[英]How to convert request object to model Spring Webflux

我的RestController有一个请求对象(DTO),我需要转换为我的模型对象(MongoDB文档),但是用Spring Webflux进行这种转换而不阻止I / O的正确方法是什么?

我想到了一些事情:

我作为发布者(Mono)的DTO,然后转换为模型并调用我的业务层:

@PostMapping("/persons")
public Mono<ResponseEntity<Void>> save(@RequestBody Mono<PersonRequest> request) {
    return request.map(r -> Person.builder()
                        .id(r.getId())
                        .name(r.getName())
                        .build())
            .flatMap(personService::save)
            .map(p -> ResponseEntity.ok().build());
}

还是我的DTO不需要成为发布者?

@PostMapping("/persons")
public Mono<ResponseEntity<Void>> save(@RequestBody PersonRequest request) {
    return personService.save(Person.builder()
                        .id(request.getId())
                        .name(request.getName())
                        .build())
            .map(p -> ResponseEntity.ok().build());
}

如果使用功能样式而不是注释,则ServerRequest提供诸如bodyToFlux(Person.class)之类的方法,这些方法可以使用,并且完全是非阻塞的。

如果您使用注释样式,则执行以下操作:

 @PostMapping("/person")
    Mono<Void> create(@RequestBody Publisher<Person> personStream) {
            return this.repository.save(personStream).then();
    }

正如您所说,这是因为,如果您不使用Publisher,则对Person的转换将受到阻碍。 请参阅https://docs.spring.io/spring/docs/5.0.0.RC4/spring-framework-reference/reactive-web.html上的 2.1.1节

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM