Можно ли добавить «404 страница не найдена» в мой класс Spring Boot Controller? - PullRequest
0 голосов
/ 27 апреля 2018

Я хочу добавить страницу с ошибкой 404 в приложение Spring, но у меня возникают проблемы с поиском документации / советов о том, как это сделать. На данный момент я запускаю приложение только локально через Eclipse. Из моего понимания Spring Applications, возможно, есть 2 способа сделать это.

  1. Введите метод в классе контроллера, который принимает какое-либо условие в его значение @RequestMapping, которое откроет страницу 404, если он не может распознать URL, например, localhost/sdksdjhfkjsdkjfsdkj. Я попробовал метод ниже с @ResponseStatus, и он не работал. Когда я пытаюсь включить @RequestMapping, появляется сообщение об ошибке, но я просто включаю его ниже, чтобы дать вам представление о том, чего я пытаюсь достичь.

    @RequestMapping(value = HttpStatus.NOT_FOUND)
    public String pageNotFound() {
    
        return "404";
    }
    
  2. Добавьте какой-нибудь HTTPSecurity метод в мой класс веб-конфигурации, который будет загружать страницу 404, если ни один URL не соответствует введенному пользователем. Ниже я приведу пример моего метода настройки.

    @Override
    protected void configure(HttpSecurity http) throws Exception {
       http
             .authorizeRequests()
                 .antMatchers("/resources/**", "/registration").permitAll()
                 .anyRequest().authenticated()
                 .and()
             .formLogin()
                 .loginPage("/login")
                 .permitAll()
                 .and()
             .logout()
                 .permitAll();
       //Disable csrf token as it is not needed for now and is preventing the applciation from running properly
     http.csrf().disable();
    

    }

Однако я не могу найти никаких методов в документации HTTPSecurity для этого.

Есть ли у кого-нибудь какие-либо предложения или документация, на которые я мог бы посмотреть для выполнения этой задачи?

1 Ответ

0 голосов
/ 27 апреля 2018

DispatcherServlet сгенерирует исключение NoHandlerFoundException, если для запрошенного ресурса (URL) нет обработчика. Вы можете перехватить исключение в ExceptionTranslator и вернуть любой желаемый ответ. Например:

@ControllerAdvice
public class ExceptionTranslator {

    @ExceptionHandler(NoHandlerFoundException.class)
    @ResponseBody
    public ResponseEntity<ErrorVM> processNoHandlerFoundException(NoHandlerFoundException ex) {
        return new ResponseEntity();
    }
}

Вы можете добавить статус и сообщение к объекту ответа, основываясь на API Springframework: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/http/ResponseEntity.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...