SpringBoot не находит шаблоны ошибок в рабочей среде, хотя находит его в Netbeans - PullRequest
1 голос
/ 11 июня 2019

Во время develepment (в Netbeans), например, если в моем проекте java SpringBoot (2.1.3) с Jetty появляется внутренняя ошибка сервера, я получаю страницу ошибки 500.html, которая находится в src / main / resources /templates / error / 500.html:

enter image description here

Тем не менее, при развертывании в производстве 500.html (то же самое для 404.html) не отображается, потому чтоиз

org.thymeleaf.exceptions.TemplateInputException: Ошибка при разрешении шаблона [/ error / 500], шаблон может не существовать или может быть недоступен для любого из настроенных преобразователей шаблонов

хотя шаблоны находятся в папке /BOOT-INF/classes/templates/error/ банки:

enter image description here

Эти шаблоны вызываются в контроллере ошибок:

@Controller
public class MyErrorController implements ErrorController {

    @RequestMapping("/error")
    public String handleError(Model model, HttpServletRequest request) {
        Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);

        if (status != null) {
            Integer statusCode = Integer.valueOf(status.toString());

            model.addAttribute("errorCode",
                    statusCode);

            if (statusCode == HttpStatus.NOT_FOUND.value()) {
                return "/error/404";
            } else if (statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) {
                return "/error/500";
            }

        }

        return "/error/error";
    }

    @Override
    public String getErrorPath() {
        return "/error";
    }

Мой проект pom.xml содержит spring-boot-maven-plugin, как указано ниже:

<plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.1.3.RELEASE</version>                
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

Обратите внимание: все остальные шаблоны можно найти.

Я прочитал этот другой ТАК вопрос но мое дерево проекта кажется правильным.

Что я должен сделать, чтобы SpringBoot нашел мои шаблоны ошибок?

Любая помощь приветствуется,

1 Ответ

0 голосов
/ 11 июня 2019

В контроллере выше путь к страницам ошибок неверен. Путь не должен начинаться с /. Так что вместо

 if (statusCode == HttpStatus.NOT_FOUND.value()) {
                return "/error/404";
            } else if (statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) {
                return "/error/500";
            }

        }

        return "/error/error";

контроллер должен быть (без ведущего /):

 if (statusCode == HttpStatus.NOT_FOUND.value()) {
                return "error/404";
            } else if (statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) {
                return "error/500";
            }

        }

        return "error/error";

Обратите внимание, что в 1010 *, как показано в сообщении Baeldung *, должен быть один ведущий /

@Override
    public String getErrorPath() {
        return "/error";
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...