No meu código, eu usei os método map
e orElse
de Optional:
@GetMapping("/{id}")
public ResponseEntity<DetalhesDoTopicoDto> detalhar(@PathVariable Long id) {
return topicoRepository.findById(id) //
.map(DetalhesDoTopicoDto::new) //
.map(ResponseEntity::ok) //
.orElse(ResponseEntity.notFound().build());
}