회원 정보 수정 코드를 짜다가
아주 삽질 삽질 개삽질을 했음.
일단 문제가 크게 3가지가 있었는데,
- Serivce 코드 문제
- Controller 코드 문제
- Thymeleaf 코드 문제
나름대로 코드를 짜보았으나...
계속되는 update 쿼리 실패.
왜 계속 select 쿼리만 나가는 거니ㅠ
아무래도 제일 먼저 Service 코드가 잘못됐다고 생각해서 그거부터 고치기 시작함.
그 다음은 Controller.
어찌저찌 고쳐도 계속 update 쿼리가 나가지 않는 것이었다.
난 viewPage 문법에 문제 있어도,
Service랑 Controller 코드 잘 짜면 DB는 수정되는 줄 알았지.
근데 계속 안 되길래, Serivce랑 Controller 코드만 계속 수정하고 있었음.
설마 Thymeleaf 때문일 줄야...
암튼 내 이론상? 아무리봐도 Service랑 Controller 코드 맞게 짠 거 같은데ㅠ
설마설마 최후의 수단으로 Thymeleaf에 문제있을까 해서 구글링 해봄.
아 그런데...
일반적으로 <form>을 통해 request 시 'POST','GET' method는 지원 하지만 'PUT','DELETE'는 지원 하지 않는다.
고 한다.
form 태그에서는 put,delete로 보내면 get으로 들어간다네?
어쩐지 계속 에러메세지가 get 어쩌구 나왔었음.
나는 그래서 Controller가 문제인가? 하고 계속 거기만 봤지.
암튼 설정값을 바꾸면 된다.
application.properties나 application.yml에
spring.mvc.hiddenmethod.filter.enabled=true
이거 넣고,
Thymleaf로 돌아가서
<form th:action="@{'/members/update/' + ${memberId} }" role="form" method="post" th:object="${memberFormDto}">
<input type="hidden" name="_method" value="PUT">
...
</form>
로 바꾸면 된다.
(저 예시는 PUT method인 경우)
th:action 부분이랑 th:object 부분은 본인이 설정한 대로 하면 됩니다.
이렇게 바꾸니까...
드디어 update 쿼리 나가고, DB도 정상 업데이트 된다.
- Thymeleaf 삽질일기 끝-
'에러' 카테고리의 다른 글
[예외 처리] isEmpty일 때 Custom Exception 실패 후기 (0) | 2023.01.25 |
---|---|
[에러] 409 에러 (0) | 2023.01.18 |
[에러] cannot construct instance of `...` & resolved [java.lang.nullpointerexception] (0) | 2023.01.17 |
[에러] 회원 가입 & 로그인 에러 처리에 대한 고찰 (0) | 2023.01.17 |
[SpringBoot 에러] (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) (0) | 2023.01.08 |