Error

[SpringBoot] thymeleaf 에러(Error resolving template)

Wonol 2021. 4. 17. 16:55
반응형

1. 에러 발생 상황

- thymeleaf 를 사용하면서, Intelli J에서 개발할 때는 이상 없이 html 파일을 찾아가며 화면이 노출되었는데, 리눅스 환경(AWS)에서 jar로 build 하고 외부에서 실행하면 아래와 같은 에러를 발생시키면서 화면에 접근하지 못하는 경우가 생긴다.

2021-04-17 16:48:36.203 ERROR 13757 --- [nio-8787-exec-1] org.thymeleaf.TemplateEngine             : [THYMELEAF][http-nio-8787-exec-1] Exception processing template "/spring/swagger/swagger": Error resolving template [/spring/swagger/swagger], template might not exist or might not be accessible by any of the configured Template Resolvers

org.thymeleaf.exceptions.TemplateInputException: Error resolving template [/spring/swagger/swagger], template might not exist or might not be accessible by any of the configured Template Resolvers
	at org.thymeleaf.engine.TemplateManager.resolveTemplate(TemplateManager.java:869) ~[thymeleaf-3.0.12.RELEASE.jar!/:3.0.12.RELEASE]
2021-04-17 16:48:36.208 ERROR 13757 --- [nio-8787-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: Error resolving template [/spring/swagger/swagger], template might not exist or might not be accessible by any of the configured Template Resolvers] with root cause

org.thymeleaf.exceptions.TemplateInputException: Error resolving template [/spring/swagger/swagger], template might not exist or might not be accessible by any of the configured Template Resolvers
	at org.thymeleaf.engine.TemplateManager.resolveTemplate(TemplateManager.java:869) ~[thymeleaf-3.0.12.RELEASE.jar!/:3.0.12.RELEASE]

2. 해결 방법

- 열심히 삽질하고 검색해본 결과로는 Controller에서 return 하여 html 파일을 불러오는 경로가 문제였다.

- 이 에러를 해결하기 위해 경로에 / 를 제거하니 정상적으로 페이지 호출이 되었다.

@GetMapping("/swagger")
    public String swagger() {
    	
    	//return "/spring/swagger/swagger";     <-- 리눅스에서 파일위치를 찾지 못함
    	return "spring/swagger/swagger";
    }

2022-04-20 추가!!!
아직 환경 차이로 인한 경로를 인식하지 못하는 이유는 정확하게 파악하진 못하였지만, 예상하기로는 로컬에서는 SpringBoot는 내장 톰캣으로 동작하게 되고, 배포 환경(AWS 등)에서는 jar나 war 파일로 배포하여 서버를 띄우기 때문에 다르게 동작(ex:외부 톰캣으로 실행) 하지 않을까라고 생각하고 있습니다.
반응형