Adnotacja springowa @ResponseStatus nie zwraca odpowiedniego kodu odpowiedzi.

1

Piszę w Springu klasę ExceptionHandlera obecnie zwracam dwa wyjątki przy rejestracji użytkownika, username already exist i email already exist. Używam do tego adnotacji ControlerAdvice, ExceptionHandler i ResponseStatus, ale problem mam z adnotacja ResponseStatus. Jeśli nie przekaże jej property 'reason' to nie działa i zwracany jest 500( potrzebuję 422) i poprawna wiadomość, taka jak chcę, do tego rzuca mi wyjątek "Circular view path exception" dla endpointu "/registration".
Natomiast jak przekażę "reason" to ResponseStatus działa i zwracany jest kod 422 ale wiadomość ciągnie z "reason", a ja potrzebuję pociagnąć ją z wyjątku

Kodzik:

@ControllerAdvice
public class RestExceptionHandler {

    // zwraca 422 ale wiadomosc nie ta
    @ExceptionHandler(UsernameAlreadyExistException.class)
    @ResponseStatus(value = HttpStatus.UNPROCESSABLE_ENTITY, reason = "Because f*** you! That's why...")
    public ErrorMessage handleUserAlreadyExist(UsernameAlreadyExistException e) {
        return new ErrorMessage(e.getMessage());
    }

    // wiadomosc zwraca dobra, ale kod nie taki i sypie sie wszystko
    @ExceptionHandler(EmailAlreadyExistException.class)
    @ResponseStatus(HttpStatus.UNPROCESSABLE_ENTITY)
    public ErrorMessage handleEmailAlreadyExist(EmailAlreadyExistException e) {
        return new ErrorMessage(e.getMessage());
    }
}

Czy potrzebuję tu skonfigurować jakoś @ResponseStatus czy sypie się coś po drodze? Nie mam pomysłu jak to rozwiązać.

1

Z tego co pamiętam to u mnie @ResponseStatus działał dobrze, bez żadnych dodatkowych konfiguracji. A musisz mieć koniecznie w odpowiedzi springowe ErrorMessage? Może spróbuj do metod w controller advisie dodać @ResponseBody i zwracać bezpośrednio exception.

0

Też chciałem zwracać reason, ale to jest nieprawidłowe. Tylko numer błędu w statusie, treść w body.

0

@Pinek: wiem, że powinno być bez konfiguracji bo moj kolega z firmy robi pobocznie projekt podobny i uzywa identycznego rozwiązania, jemu działa wszystko bez problemu. No możnaby ResponseBody, ale wtedy zwróci mi sam wyjątek i wiadomość jego i do tego musiałbym dokleić status. Jakoś ten ResponseStatus bardziej elegancki :<

@jarekczek: tak ja też w body chce zwracać, ale ta adnotacja powinna działać bez problemu a nie działa i nie wiem o co chodzi.

0

Rozwiązane: Zgubiło się @ResponseBody przy medotach handlera. Ewentualnie od wersji Springa 4.3.8. Boot v. 1.5.6 jest adnotacja @RestControllerAdvice dzięki, której możemy pominąć response body.

0

@Prędki_Lopez: No toć przecież ci pisałem o tej adnotacji :P

0

@Pinek: Jezus Maria Chryste Panie Faktycznie! Ale ze mnie gapa, zasugerowałem się zwracaniem bezpośrednio exceptiona, które zasugerowałeś, a tego nie chciałem i zapomniałem, żeby spróbować Response body :D

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