Vavr Try<> - jak to zapisac?

Vavr Try<> - jak to zapisac?
NN
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 3 lata
  • Postów:2
0

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

Kopiuj
    @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:

Kopiuj
    @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?

edytowany 1x, ostatnio: notNoob
Skoq
  • Rejestracja:około 6 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Kraków
  • Postów:255
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.

Kopiuj
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ł


I tak to właśnie jest

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.