본문 바로가기
버그일기

[Spring Boot] template might not exist or might not be accessible by any of the configured Template Resolvers

by xunxou 2023. 1. 22.

다음과 같은 상황에서 에러가 발생했습니다.

1) Thymeleaf 를 사용
2) ajax를 사용해 비동기 처리

[에러메세지]

Thymeleaf 템플릿이 존재하지 않거나 엑세스하지 못한다는 구문의 에러입니다.

org.thymeleaf.exceptions.TemplateInputException:
Error resolving template [controller 경로], template might not exist or might not be accessible by any of the configured Template Resolvers

 

 

[Controller 코드]

@Controller
public class Controller {
	...
    
    @PostMapping("경로")
    public HashMap<String, String> 메소드(@RequestParam("id") String id){
    	HashMap<String, String> result = new HashMap<>();
        
        if(StringUtils.isEmpty(id)){
            result.put("result", "fail");
            return result;
        }

        result.put("result", "success");
        service.처리(id);
        
        return result;
    }
    
    ...
}

 

[원인 및 해결방법]

@Controller에서는 return 값을 view 경로와 매칭하기 때문에 위 코드에서는 Template 매칭 에러가 발생합니다. (fail 또는 success view 페이지를 view 페이지로 인식해 검색하게 됩니다.)

해당 구문에서의 return 값은 view 경로가 아닌 ajax 요청처리 후 반환해줄 값이기 때문에

viewResolver 가 return 값을 view 경로로 인식하지 않도록 @ResponseBody를 사용하거나 @Controller를 @RestController 로 변경해주면 해결됩니다.

@Controller
public class Controller {
	...
    
    @PostMapping("경로")
    @ResponseBody // 어노테이션 추가!!
    public HashMap<String, String> 메소드(@RequestParam("id") String id){
    	HashMap<String, String> result = new HashMap<>();
        
        if(StringUtils.isEmpty(id)){
            result.put("result", "fail");
            return result;
        }

        result.put("result", "success");
        service.처리(id);
        
        return result;
    }
    
    ...
}