1. введение
В этом уроке мы рассмотрим, как мы получаем и устраняем ошибки пути кругового обзора в приложении Spring MVC.
2. Зависимости
Чтобы продемонстрировать это, давайте создадим простой веб-проект Spring Boot. Во-первых, нам нужно добавить зависимость Spring Boot web starter в наш файл проекта Maven:
org.springframework.boot spring-boot-starter-web
3. Воспроизведение проблемы
Затем давайте создадим простое приложение Spring Boot с одним Контроллером , которое разрешает один путь:
@Controller public class CircularViewPathController { @GetMapping("/path") public String path() { return "path"; } }
Возвращаемое значение-это имя представления, которое будет генерировать данные ответа. В нашем случае возвращаемым значением является path , который связан с path.html шаблон:
path.html path.html
После запуска сервера мы можем воспроизвести ошибку, отправив запрос GET в http://localhost:8080/path . Результатом будет ошибка пути кругового обзора:
{"timestamp":"2020-05-22T11:47:42.173+0000","status":500,"error":"Internal Server Error", "message":"Circular view path [path]: would dispatch back to the current handler URL [/path] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)","path":"/path"}
4. Решения
По умолчанию платформа Spring MVC применяет класс InternalResourceView в качестве распознавателя представлений. В результате, если значение @GetMapping совпадает с представлением , запрос завершится ошибкой пути кругового представления.
Одним из возможных решений было бы переименовать представление и изменить возвращаемое значение в методе контроллера.
@Controller public class CircularViewPathController { @GetMapping("/path") public String path() { return "path2"; } }
Если мы не хотим переименовывать представление и изменять возвращаемое значение в методе контроллера, то другим решением является выбор другого процессора представления для проекта.
Для наиболее распространенных случаев мы можем выбрать Thymeleaf Java template engine . Давайте добавим |/spring-boot-starter-thymeleaf зависимость в проект:
org.springframework.boot spring-boot-starter-thymeleaf
После перестройки проекта мы можем запустить его снова, и запрос будет успешным. В этом случае Thymeleaf заменяет класс InternalResourceView .
5. Заключение
В этом уроке мы рассмотрели ошибку пути кругового обзора, почему это происходит и как решить эту проблему. Как всегда, полный исходный код статьи доступен на GitHub .