Solución:
En Spring Boot 1.4.x puede agregar una página de error personalizada:
Si desea mostrar una página de error HTML personalizada para un código de estado dado, agregue un archivo a un
/error
carpeta. Las páginas de error pueden ser HTML estático (es decir, agregadas en cualquiera de las carpetas de recursos estáticos) o construidas con plantillas. El nombre del archivo debe ser el código de estado exacto o una máscara de serie.Por ejemplo, para asignar 404 a un archivo HTML estático, la estructura de su carpeta se vería así:
src/ +- main/ +- java/ | + <source code> +- resources/ +- public/ +- error/ | +- 404.html +- <other public assets>
Estás usando Thymeleaf, y Thymeleaf puede manejar errores sin un controlador.
Para una página de error genérica, esta página de Thymeleaf debe nombrarse como error.html
y debe colocarse debajo src/main/resources > templates > error.html
Para páginas de error específicas, debe crear archivos con el nombre de código de error http en una carpeta llamada error, como: src/main/resources/templates/error/404.html
.
new ErrorPage (HttpStatus.NOT_FOUND, “/404.html“)
Ese /404.html
representa el Ruta de URL para redireccionar, no el nombre de la plantilla. Dado que insiste en usar una plantilla, debe crear un controlador que maneje el /404.html
y hace tu 404.html
reside en src/main/resources/templates
:
@Controller
public class NotFoundController {
@RequestMapping("/404.html")
public String render404(Model model) {
// Add model attributes
return "404";
}
}
También puede reemplazar estos controladores de renderizador de solo vista con un Ver controlador:
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/404.html").setViewName("404");
}
}
Además, ¿es posible utilizar plantillas y no solo páginas estáticas para páginas de error personalizadas?
Si es posible. Pero las páginas no encontradas suelen ser estáticas y utilizan una plantilla en lugar de HTML antiguos sencillos no tendría mucho sentido.