Obsługa wyjątku 404 Not Found

0

Posiadam kontroler, który w razie przypadku, gdy nie będzie użytkownika o podanej nazwie, to zwróci 404 NOT FOUND.

@GetMapping(value = "/profile/{username}", produces = MediaType.APPLICATION_JSON_VALUE)
    public HttpEntity<User> getUsers(@PathVariable("username") String username) {
        User user = userService.findOneByUsername(username);
 
        if(user != null) {
            return ResponseEntity.ok(user);
        }
 
        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }

Następnie stworzyłem kontroler, który będzie w stanie obsłużyć ten wyjątek

@ControllerAdvice
public class ExceptionHandlerController {
 
    @ExceptionHandler(NoHandlerFoundException.class)
    @ResponseStatus(value = HttpStatus.NOT_FOUND)
    public ModelAndView handleNotFound(NoHandlerFoundException e) {
        return new ModelAndView("redirect:/signIn");
    }
}

Jednak nie ma żadnego efektu. Kontroler zwraca mi normalną domyślną stronę błędu 404. Nie reaguje na mój kontroler.

EDIT: Ustawiłem spring.mvc.throw-exception-if-no-handler-found=true , ale to również nie pomogło. Używam Spring Boot.

Chcę uzyskać taki efekt jak na stronie https://myanimelist.net/profile/jonkijonki . Podałem zła nazwę użytkownika i pokazało mi spersonalizowaną stronę błędu 404.

0

To w ogóle tak nie działa. @ExceptionHandler obsługuje wyjątki, a to że twój kontroler zwraca 404 to nie jest żaden wyjątek. Zresztą w argumencie przekazałeś tam NoHandlerFoundException, który nijak nie ma się do przykładu, który pokazałeś. Opcji masz pewnie kilka, przedstawię ci 2. Wciąż korzystasz z @ExceptionHandler, tylko wtedy twoja klasa obsługująca logikę biznesową musi rzucić jakiś wyjątek, np UserNotFoundException i nie obsługujesz go w wyższych warstwach. Wtedy dajesz do jako parameter do @ExceptionHandler i tam go obsługujesz. Drugi sposób to robisz jakąs metodą utilsową i ją wołasz w kontrolerach, która sprawdza czy jest null czy nie i na podstawie tego ustawia status i ew widok czy co tam chcesz.

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