Witam, udało mi się zrobić coś w IntelliJ IDEA czego nie do końca rozumiem. Podoba mi się wsparcie ze strony IDE, pomaga budować poczwarki :) No ale czym dalej w las tym więcej drzew, bo konserwacja złego kodu jest trudna. Proszę o pomoc, wyjaśnienie czemu IDE podpowiada tak dziwne typy zagnieżdżone i jak zrobić by przybrało to klarowną postać. Piszę REST-API.
@GetMapping("/{id}")
public ResponseEntity<Optional<EntityModel<Owner>>> getOwner(@PathVariable("id") Integer id) {
var filteredOwners = findOwnerById(id);
if (findOwnerById(id).isEmpty()) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
} else {
return ResponseEntity.ok()
.body(filteredOwners.map(HateoasConverter::mapToEnityModel));
}
}
public class HateoasConverter {
public static EntityModel<Owner> mapToEnityModel(Owner owner) {
EntityModel<Owner> ownerModel = new EntityModel<>(owner);
ownerModel.add(linkTo(
methodOn(OwnerController.class).getOwner(owner.getId()))
.withSelfRel());
return ownerModel;
}
}
private Optional<Owner> findOwnerById(Integer id) {
return ownersList.stream()
.filter(owner -> owner.getId().equals(id))
.findAny();
}
Owner to po prostu bean, chodzi o zwracanie kodu odpowiedzi a także self-referencji. Metodę mapToEnityModel daje się wstawić do findOwnerById ale wtedy nie wchodzi warunek findOwnerById(id).isEmpty() Zdaje mi się, że za mało wiem o typie Optional i coś pomieszałem :)