다음과 같은 상황에서 에러가 발생했습니다.
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;
}
...
}
'버그일기' 카테고리의 다른 글
[JPQL] For queries with named parameters you need to use provide names for method parameters. (0) | 2023.01.22 |
---|---|
[spring boot] 비동기 처리와 response 500 에러 (0) | 2023.01.13 |
[tiles] org.xml.sax.SAXParseException 에러 (0) | 2022.04.26 |
[SVN] Attempted to lock an already-locked dir 에러 (0) | 2020.02.20 |