En mi aplicación Spring Boot, actualmente estoy aprovechando la página de error personalizada resources/public/error/404.html para mostrar (automágicamente) los errores de esta página 404 en URL no válidas.
¿Hay una manera fácil de conservar esta funcionalidad automática y agregar un mensaje de registro simple (con la URL no válida) para cada 404?
Idealmente, con la menor cantidad de código posible, me gustaría algo como:
//Some code LOGGER.warn("Invalid URL " + request.url); //Some more codeDebe definir un ErrorViewResolver personalizado:
@Component public class MyErrorViewResolver implements ErrorViewResolver { @Override public ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) { if (HttpStatus.NOT_FOUND == status) { LoggerFactory.getLogger(this.getClass()).error("error 404 for url " + model.get("path")); return new ModelAndView("error404", model); } else { return new ModelAndView("error", model); } } }Este MyErrorViewResolver se llamará automáticamente en la clase BasicErrorController.
Para un error 404, se mostrará la vista "error404".
Para los demás errores, se mostrará la vista "error".
Las vistas deben estar en la carpeta "plantillas" (resources/templates/error404.html).
Agregue el controlador NotFoundException.
public class BaseController { // Logger declaration @ExceptionHandler(NotFoundException.class) @ResponseStatus(value = HttpStatus.NOT_FOUND) @ResponseBody public ErrorResponse handleNotFoundError(HttpServletRequest req, NotFoundException exception) { List<Error> errors = Lists.newArrayList(); errors.add(new Error(String.valueOf(exception.getCode()), exception.getMessage())); log.error(exception); return new ErrorResponse(errors); } }