Co powinna zwracać metoda z restTemplate ?

0

W jaki sposób wg Was powinna wyglądać metoda w której jest restTemplate który rzuca wyjątek

throw new HttpServerErrorException(HttpStatus.SERVICE_UNAVAILABLE)

czy ona powina coś zwracać ? zatrzymywać działanie programu ? czy jeszcze coś innego

public Clay getClay() {
        Clay clay;
        try {
            clay = restTemplate.getForObject(CLAY_URL, Clay.class);
            return clay;
        } catch (RestClientResponseException exception) {
            restTemplate.getErrorHandler();
            //tu jakaś obsługa błędu
            return ????;
        }
    }
1

Zakładając że robisz blokujące zapytanie to zwróciłbym to lub
to chyba że "ignorujesz" wyjątek (tzn nie interesuje Cię powód dla czego coś poszło nie tak) to Optional

1

Chciałbyś serwer, który przestaje działać po rzuceniu wyjątku? :) możesz zwrócić optionala, try vavrowego, ew. nulla (lepiej nie) albo przekazać exception wyżej

0

@scibi92: a masz jakiś fajny przykład z tym Either? Rozumiem, że left() przypisze jakiś wyjątek, right() odpowiedź, ale potem w controlerze jak to ogarnąć? Jeśli chcę inny ServerReponse dla obu przypadków to sprawdzać ifami isLeft() i isRight()?

@davyd nie wiem jak w zwykłym Springu, ale wiem że w dokumentacji webfluxa podawali ze restTemplate będzie depracated, polecają użycia WebClient.

        return this.myWebClientObject
                .post()
                .syncBody(postParams)
                .retrieve()
                .bodyToMono(String.class)
                .map(response -> new MyResponseDto(response))                
                .onErrorResume(ex -> {
                    log.error("tu pisz sobie sensowny log do bazy z parametrami {} i stacktrace" param, ex);
                    return Mono.just(new MyResponseDto("fail"));
                });

czyli generalnie jak mi coś walnie wyjątkiem to robię tylko log do bazy i odpowiednią odpowiedź dla frontu.

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