【发布时间】:2018-10-05 16:58:30
【问题描述】:
我的 RestController 有一个请求对象 (DTO),我需要转换为我的模型对象(MongoDB 文档),但是使用 Spring Webflux 进行此转换而不阻塞 I/O 的正确方法是什么?
我想到了一些事情:
我的 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());
}
【问题讨论】:
-
如果您使用的是经典的带注释的控制器,请直接使用 DTO。没有必要把事情复杂化。 Handler方法一般使用ServerRequest.monoToClass等
标签: java spring spring-webflux project-reactor