티스토리 뷰
[오류해결]template might not exist or might not be accessible by any of the configured Template Resolvers
foodev 2022. 7. 7. 18:53뷰에서 해당 게시글 삭제를 만들려고 하던 중 맞이한 오류이며 JPA queryDsl 작성중 맞이한 오류이다.
뷰 페이지에서 게시글 삭제 버튼 클릭 시 ajax를 통해 해당 게시글의 id를 보내주고,
Controller에서 @Pathvariable로 id값을 받아서 DaoCustom, DaoCustomImpl로 가는 로직을 구상했다.
그러던 중 아래와 같은 오류 메시지를 마주했다.
template might not exist or might not be accessible by any of the configured Template Resolvers
원인을 구글링해 본 결과 리턴해 줄 페이지가 없을 경우 경로를 찾지 못해 발생한 오류 라고 한다.
그러나 나는 @DeleteMapping을 사용하므로 리턴 페이지가 필요 없었고
페이지를 그릴 필요가 없는데 왜 오류가 나는 것이지?? 라는 생각을 했다.
그러던 중 해결하게 되어 아래에 글을 작성하게 되었다.
1. 전체 로직을 살펴보자.
Q. 오류가 났을 때 내가 집중적으로 봤던 부분들이다. 이 말이 오류를 해결할 수 있는 힌트다.
write.html
//ajax 임시저장 삭제 로직
function deleteDraftArticle(targetId) {
if(!confirm("정말로 삭제하시겠습니까?")) {
alert("취소되었습니다.");
} else{$.ajax({
url: "/v1/delete/" + targetId,
method: "DELETE",
success: function (result) {
console.log("result", result);
alert("삭제되었습니다.");
reloadDraftArticles();
},
error: function(xhr, status, error) {
var response = JSON.parse(xhr.responseText);
if(response) {
alert("요청 실패");
}else {
alert("API 호출 실패");
}
}
});
}
}
Controller
@DeleteMapping("/delete/{articleId}")
public void deleteDraftArticle(HttpServletRequest req, @PathVariable("articleId") Long articleId) {
articleDao.deleteArticleById(articleId);
}
DaoCustom
void deleteArticleById(Long articleId);
DaoCustomImpl
@Override
@Transactional
public void deleteArticleById(Long articleId) {
queryFactory.delete(bookClubArticle)
.where(article.id.eq(articleId)
.and(article.status.eq(ArticleStatus.WRITE)))
.execute();
}
2. 문제해결
@Controller와 @RestController
Q. 오류가 났을 때 내가 집중적으로 봤던 부분들이다.
위에 작성한 부분을 기억하는가?
해답은 바로 @RestController가 아닌 @Controller로 선언된 Controller에서 작업했기 때문이다.
내가 이런 실수를 한 이유는
1. 나는 그동안 다뤘던 코드의 부분들은 다 @RestController가 선언된 파일들이였기 때문에
당연히 이번에도 @RestController인 줄 알았다...
2. Controller를 만든 파일명이 article에 대해 선언된 Controller라 해당 파일에 만들면 될 줄 알았음
즉 나의 경우는 @RestController에 선언된 곳에서 작업을 하지 않았기 때문에 발생한 오류 였다.
[@Controller가 아닌 @RestController의 차이]
@RestController는 이름에서도 알 수 있겠지만
RestAPI를 만들 때 선언하는 어노테이션이다.
나는 제이쿼리에서 지원하는 ajax 통신을 이용했기 때문에 @RestController를 선언한 곳에서 작업 했어야 했으나.
@Controller가 선언된 곳에서 만들었고 @Controller 였기 때문에
view가 있어야 한다고 오류가 나왔던 것이였다.
자세한 내용은 아래를 참고 하길 바란다.
'💻 개발 > 프레임워크' 카테고리의 다른 글
- Total
- Today
- Yesterday