기본적으로 html은 form으로 put과 delete 요청을 보낼 수 없다.
그럼 html만으로는 rest api를 쓸 수 없는가?
스프링에서 제공하는 HiddenHttpMethodFilter를 사용하면 폼에서 put,delete요청을 보낼 수 있다.
링크 참고 : https://graypaper.tistory.com/4
근데 저 객체도 결국 필터이기 때문에 필터로 등록을 해주어야 한다.
나는 스프링 부트로 필터를 등록해본적이 없다.
그냥 스프링 프레임웍은 web.xml에 등록해서 썻는데 부트는 어떻게 등록하지??
방법은 두가지가 있는데 링크를 참고하자.
https://linked2ev.github.io/gitlog/2019/09/15/springboot-mvc-13-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-MVC-Filter-%EC%84%A4%EC%A0%95/
근데 이상하게 히든필터를 등록해주고 나니 데이터가 깨진다.
인코딩에 문제가 생긴것 같다.
필터를 하나 추가해 줬는데 왜 데이터가 깨지는거지..?
아마 히든 필터가 케릭터셋을 건드리거나, 기본적으로 동작하는 필터와 우선순위가 뭔가 달라져서 그런듯하다.
인코딩이 깨졌으니 인코딩 필터를 추가해보자
아래 링크에 두가지 방법이 있다.
https://handcoding.tistory.com/156
케릭터셋 인코딩을 빈으로 만들어서 추가해도 안되고
프로퍼티에 설정해도 안된다.
위 히든필터처럼 FilterRegistrationBean 으로 만들어봤다.
https://handcoding.tistory.com/156
된다.음..이유가 뭘까. 필터의 우선순위에 문제가 있다는 생각이 들기 시작함.
적절한 페이지를 찾았다
https://mtyurt.net/post/spring-how-to-insert-a-filter-before-springsecurityfilterchain.html
setOrder로 순서를 정해주면 될 듯하다
이게 좀 헷갈리긴 하는데 여튼 중요한건 필터우선순위가 있다는것을 항상 인지해야한다.