에러

[에러] Thymeleaf가 PUT method를 지원하지 않는 현상

ummchicken 2023. 2. 3. 00:00

회원 정보 수정 코드를 짜다가 

아주 삽질 삽질 개삽질을 했음.

 

 

일단 문제가 크게 3가지가 있었는데, 

  1. Serivce 코드 문제
  2. Controller 코드 문제
  3. 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 삽질일기 끝-