Vavr Try<> - jak to zapisac?

0

Mam taki przypadek, ktory chcialbym zapisac uzywajac vavr'owego Try:

    @GetMapping
    public ResponseEntity<?> getSomething(@RequestParam(value = "param") String param) {
        try {
            return ResponseEntity.ok(service.getSomething(param));
        } catch (IllegalArgumentException exception) {
            return new ResponseEntity<>(new ErrorInfo("Param=" + param + " is not valid"), HttpStatus.BAD_REQUEST);
        }
    }

Probuje to zapisac w ten sposob, ale wtedy nie zgadza mi sie zwracany typ, bo getSomething zwraca jakis inny obiekt niz ErrorInfo:

    @GetMapping
    public ResponseEntity<?> getSomething(@RequestParam(value = "param") String param) {
        return Try.of(() -> service.getSomething(param))
                .map(ResponseEntity::ok)
                .recover(IllegalArgumentException.class, new ResponseEntity<>(new ErrorInfo("Param=" + param + " is not valid"), HttpStatus.BAD_REQUEST)
                .get();
    }

Da sie to w ogole ograc w Vavr?

3

Ja bym to przemapował wcześniej na Either, dlatego, że ewidentnie chcesz przekazać co poszło nie tak. Następnie w warstwie api stworzył jakąś klasę pomocniczą, która mapowała by Ci rezultat na ResponseEntity np.

ResponseEntity resolve (Either<Error, ?> either) {
  either.map(ResponseEntity::ok).getOrElseGet(it -> new ResponseEntity<>(it.getMessage(), HttpStatus.valueOf(it.getHttpCode())))
}

Nie wiem czy składniowo jest ok wszystko bo z głowy ale tak bym do tego podszedł

1 użytkowników online, w tym zalogowanych: 0, gości: 1