• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zwracanie NOT_FOUND

0 głosów
190 wizyt
pytanie zadane 15 września 2017 w Java przez Jonki Dyskutant (8,180 p.)
edycja 15 września 2017 przez Jonki

Posiadam kontroler, który zwraca użytkownika

@GetMapping(value = "/account/{username}")
    public
    HttpEntity<UserProfileDTO> getProfile(
            @ApiParam(value = "The user's name", required = true) @PathVariable String username
    ) {
        return Optional
                .ofNullable(userService.findOneByUsername(username))
                .map(user -> ResponseEntity.ok().body(converterUserToUserProfileDTO.convert(user)))
                .orElseGet(() -> ResponseEntity.notFound().build());
    }

w tej wersji kontroler zwraca 

ResponseEntity.notFound().build()

wszystko jet OK https://zapodaj.net/7f91c7119a9a1.png.html.

Jednak pomyślałem, aby spróbować coś wyrzucić w ResponseBody podczas rzucania błędu, dlatego utworzyłem wyjątek

@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {

    public ResourceNotFoundException(String message) {
        super(message);
    }
}

i kontroler dla niego

@RestControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<String> handleResourceNotFoundException(ResourceNotFoundException ex) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
    }
}

dodatkowo kontroler pobierający użytkownika rzuca teraz ten wyjątek zamiast zwracania NOT_FOUND

.orElseThrow(() -> new ResourceNotFoundException("User not found");

i tym oto sposobem dostaję NIC https://zapodaj.net/68c19d8b8e34e.png.html. Nawet brak kodu błędu. Może ktoś powiedzieć mi co robię nie tak?

1 odpowiedź

0 głosów
odpowiedź 15 września 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Nie powinnieneś zamiast orElseGet dać orElseThrow? Wtedy rzucisz wyjątek i uruchomisz całą logike obsługi.
komentarz 15 września 2017 przez Jonki Dyskutant (8,180 p.)
Sorry. Źle skopiowałem, bo tutaj na forum pisałem kod o który mi chodzi.
komentarz 15 września 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Pierwszy raz widze annotacje restControllerAdvice sprawdxales czy dziala bez czlonu rest ?

Podobne pytania

+1 głos
1 odpowiedź 265 wizyt
pytanie zadane 11 listopada 2020 w Java przez siemasiema123.96 Początkujący (350 p.)
0 głosów
2 odpowiedzi 232 wizyt

93,425 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,785 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...