Solución:
Usar switchIfEmpty
para lanzar una excepción en caso de que el usuario no exista:
return repository
.findById(userId)
.switchIfEmpty(Mono.error(NotFoundException("User not found")))
.flatMapIterable{ it.options }
.map { OptionDto.from(it) }
Luego, con un controlador de excepciones, conviértalo en una respuesta 404.
Puede usar devolviendo Mono con ResponseEntity
como esto
public Mono<ResponseEntity<?>> oneRawImage(
@PathVariable String filename) {
// tag::try-catch[]
return imageService.findOneImage(filename)
.map(resource -> {
try {
return ResponseEntity.ok()
.contentLength(resource.contentLength())
.body(new InputStreamResource(
resource.getInputStream()));
} catch (IOException e) {
return ResponseEntity.badRequest()
.body("Couldn't find " + filename +
" => " + e.getMessage());
}
});
}
También tengo un ejemplo como este
public ResponseEntity<Mono<?>> newLive(@Valid @RequestBody Life life) {
Mono<Life> savedLive = liveRepository.save(life);
if (savedLive != null) {
return new ResponseEntity<>(savedLive, HttpStatus.CREATED);
}
return new ResponseEntity<>(Mono.just(new Life()), HttpStatus.I_AM_A_TEAPOT);
}
No me gusta la programación funcional en los controladores REST.
Aquí hay un ejemplo de ReactiveController.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)