У меня была такая же проблема, я получил ее решение.Ниже приведены шаги для решения той же проблемы.
- Создайте класс
GlobalExceptionHandler
с пометкой @ControllerAdvice
@ControllerAdvice
public class GlobalExceptionHandler
{
@ExceptionHandler(NoHandlerFoundException.class)
public String handleNotFoundError(Exception ex)
{
return "redirect:/yourCustom404page";
}
}
По умолчанию, когда страница / ресурс не существует, контейнер сервлета выдаст страницу 404 по умолчанию.Если вы хотите получить пользовательский ответ 404, вам нужно указать
DispatcherServlet
, чтобы он выдал исключение, если обработчик не найден.Мы можем сделать это, установив для параметра инициализации сервлета
throwExceptionIfNoHandlerFound
значение
true
, чтобы добиться этого
a.Spring-boot
spring.resources.add-mappings=false
в вашем application.properties или файле yaml.
b.Если конфигурация на основе Spring-MVC Java - это
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer
{
...
@Override
protected DispatcherServlet createDispatcherServlet(WebApplicationContext servletAppContext)
{
final DispatcherServlet servlet = (DispatcherServlet) super.createDispatcherServlet(servletAppContext);
servlet.setThrowExceptionIfNoHandlerFound(true);
return servlet;
}
}
c.если конфигурация на основе Spring-Mvc xml, инициализируйте ваш сервлет-диспетчер следующим образом
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>throwExceptionIfNoHandlerFound</param-name>
<param-value>true</param-value>
</init-param>
</servlet>