diff --git a/config/messages/app.properties b/config/messages/app.properties index a92101025c50..374dbf46c5b6 100644 --- a/config/messages/app.properties +++ b/config/messages/app.properties @@ -51,6 +51,7 @@ error.appError=Application error error.dataNotFound=Data not found error.dataError=Data error error.validationError=Validation error +error.wrongRequest=Wrong request NotEmpty="{0}" must not be empty NotBlank="{0}" must not be empty diff --git a/config/messages/app_ru.properties b/config/messages/app_ru.properties index fc4e7c38d33e..2a3e25a9b2bd 100644 --- a/config/messages/app_ru.properties +++ b/config/messages/app_ru.properties @@ -53,6 +53,7 @@ error.appError=Ошибка приложения error.dataNotFound=Данные не найдены error.dataError=Ошибка в данных error.validationError=Ошибка проверки данных +error.wrongRequest=Неверный запрос NotEmpty=Поле "{0}" не должно быть пустым NotBlank=Поле "{0}" не должно быть пустым diff --git a/src/main/java/ru/javawebinar/topjava/util/ValidationUtil.java b/src/main/java/ru/javawebinar/topjava/util/ValidationUtil.java index c3d83cf64fca..53af78ff0159 100644 --- a/src/main/java/ru/javawebinar/topjava/util/ValidationUtil.java +++ b/src/main/java/ru/javawebinar/topjava/util/ValidationUtil.java @@ -1,9 +1,12 @@ package ru.javawebinar.topjava.util; +import org.slf4j.Logger; import ru.javawebinar.topjava.HasId; +import ru.javawebinar.topjava.util.exception.ErrorType; import ru.javawebinar.topjava.util.exception.IllegalRequestDataException; import ru.javawebinar.topjava.util.exception.NotFoundException; +import javax.servlet.http.HttpServletRequest; import javax.validation.*; import java.util.Set; @@ -77,4 +80,14 @@ public static void validate(T bean) { throw new ConstraintViolationException(violations); } } + + public static Throwable logAndGetRootCause(Logger log, HttpServletRequest req, Exception e, boolean logException, ErrorType errorType) { + Throwable rootCause = ValidationUtil.getRootCause(e); + if (logException) { + log.error(errorType + " at request " + req.getRequestURL(), rootCause); + } else { + log.warn("{} at request {}: {}", errorType, req.getRequestURL(), rootCause.toString()); + } + return rootCause; + } } \ No newline at end of file diff --git a/src/main/java/ru/javawebinar/topjava/util/exception/ErrorType.java b/src/main/java/ru/javawebinar/topjava/util/exception/ErrorType.java index cb231e1e17be..a3fa60dbe8c9 100644 --- a/src/main/java/ru/javawebinar/topjava/util/exception/ErrorType.java +++ b/src/main/java/ru/javawebinar/topjava/util/exception/ErrorType.java @@ -4,7 +4,8 @@ public enum ErrorType { APP_ERROR("error.appError"), DATA_NOT_FOUND("error.dataNotFound"), DATA_ERROR("error.dataError"), - VALIDATION_ERROR("error.validationError"); + VALIDATION_ERROR("error.validationError"), + WRONG_REQUEST("error.wrongRequest"); private final String errorCode; diff --git a/src/main/java/ru/javawebinar/topjava/web/ExceptionInfoHandler.java b/src/main/java/ru/javawebinar/topjava/web/ExceptionInfoHandler.java index 214b5a815d76..a57c9b5aee7c 100644 --- a/src/main/java/ru/javawebinar/topjava/web/ExceptionInfoHandler.java +++ b/src/main/java/ru/javawebinar/topjava/web/ExceptionInfoHandler.java @@ -92,12 +92,7 @@ public ErrorInfo handleError(HttpServletRequest req, Exception e) { } private ErrorInfo logAndGetErrorInfo(HttpServletRequest req, Exception e, boolean logException, ErrorType errorType, String... details) { - Throwable rootCause = ValidationUtil.getRootCause(e); - if (logException) { - log.error(errorType + " at request " + req.getRequestURL(), rootCause); - } else { - log.warn("{} at request {}: {}", errorType, req.getRequestURL(), rootCause.toString()); - } + Throwable rootCause = ValidationUtil.logAndGetRootCause(log, req, e, logException, errorType); return new ErrorInfo(req.getRequestURL(), errorType, messageUtil.getMessage(errorType.getErrorCode()), details.length != 0 ? details : new String[]{ValidationUtil.getMessage(rootCause)}); diff --git a/src/main/java/ru/javawebinar/topjava/web/GlobalControllerExceptionHandler.java b/src/main/java/ru/javawebinar/topjava/web/GlobalControllerExceptionHandler.java index 85be5053105d..d8c72f5d9527 100644 --- a/src/main/java/ru/javawebinar/topjava/web/GlobalControllerExceptionHandler.java +++ b/src/main/java/ru/javawebinar/topjava/web/GlobalControllerExceptionHandler.java @@ -6,6 +6,7 @@ import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.NoHandlerFoundException; import ru.javawebinar.topjava.AuthorizedUser; import ru.javawebinar.topjava.util.ValidationUtil; import ru.javawebinar.topjava.util.exception.ErrorType; @@ -19,12 +20,21 @@ public class GlobalControllerExceptionHandler { @Autowired private MessageUtil messageUtil; + @ExceptionHandler(NoHandlerFoundException.class) + public ModelAndView wrongRequest(HttpServletRequest req, NoHandlerFoundException e) throws Exception { + return logAndGetExceptionView(req, e, false, ErrorType.WRONG_REQUEST); + } + @ExceptionHandler(Exception.class) public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception { - log.error("Exception at request " + req.getRequestURL(), e); - Throwable rootCause = ValidationUtil.getRootCause(e); + return logAndGetExceptionView(req, e, true, ErrorType.APP_ERROR); + } + + private ModelAndView logAndGetExceptionView(HttpServletRequest req, Exception e, boolean logException, ErrorType errorType) { + Throwable rootCause = ValidationUtil.logAndGetRootCause(log, req, e, logException, errorType); + ModelAndView mav = new ModelAndView("exception/exception"); - mav.addObject("typeMessage", messageUtil.getMessage(ErrorType.APP_ERROR.getErrorCode())); + mav.addObject("typeMessage", messageUtil.getMessage(errorType.getErrorCode())); mav.addObject("exception", rootCause); mav.addObject("message", ValidationUtil.getMessage(rootCause)); diff --git a/src/main/resources/spring/spring-mvc.xml b/src/main/resources/spring/spring-mvc.xml index 52254dcd7099..85f4329d6eb9 100644 --- a/src/main/resources/spring/spring-mvc.xml +++ b/src/main/resources/spring/spring-mvc.xml @@ -11,7 +11,8 @@ - + + diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index c80a34ec11df..834c26575d3a 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -30,6 +30,10 @@ contextConfigLocation classpath:spring/spring-mvc.xml + + throwExceptionIfNoHandlerFound + true + 1 diff --git a/src/main/webapp/test.html b/src/main/webapp/test.html deleted file mode 100644 index 711e4e2d8190..000000000000 --- a/src/main/webapp/test.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - -
- -
- - \ No newline at end of file