Spring

[Spring] HiddenHttpMethodFilter로 GET,POST를 DELETE,PUT등 으로 받기_Spring Boot설정

cornarong 2021. 8. 26. 00:47

브라우저 VIEW단에서 서버로 데이터를 전송할 경우 FORM으로 GET 또는 POST로 전송이 가능하다.

 

FORM에서 전송된 GET 또는 POST 타입은 서버에서 @GetMapping 또는 @PostMapping으로 받을 수 있지만 나머지 DELETE, PUT, PATCH 타입들은 FORM에서 지원하지 않기 떄문에 기존에는 ajax로 타입을 명시하여 전달한 후 @DeleteMapping, @PutMapping, @PatchMapping으로 받았었다.

 

하지만 HiddenHttpMethodFilter를 사용하면 기존 FORM 방식으로 전송하고 서버에서는 원하는 타입으로 받을 수 있다.

즉, VIEW단에서 기존 FORM의 GET 또는 POST로 전송한 후 서버에서 PUT, DELETE, PATCH등으로 타입을 변환하여 받을 수 있다.

 

1. 우선 앞서 사용하기 위해 빈으로 등록한다.

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.HiddenHttpMethodFilter;

@Configuration
public class SpringConfig {

    @Bean
    public HiddenHttpMethodFilter httpMethodFilter() {
        HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
        return hiddenHttpMethodFilter;
    }
}

 

2. form태그안에 input태그를 추가해 형식에 맞게 입력해 준다.

<form action="#" th:action="@{/test/{testId}(tesetId=${test.id})}" th:object="${test}" method="post">
	<input type="hidden" name="_method" value="put"> <!-- HiddenHttpMethodFilter 사용 -->

위의 예시를 보면 첫줄에는 기존의 FORM 방식으로 경로는 /test/{testId}, method="post"로 입력되어 있다.

 

하지만 바로 아랫줄을 보면 form태그 안에 같이 hidden타입으로 name="_method",  value="받고자 하는 타입"으로 하는 태그를 추가 해주기만 하면 서버단에서는 개발자가 원하는 메서드타입으로 받을 수 있다.

 

직접 적용해서 사용해보니 설정도 간편하고 편리하다. 상황에 필요에 따라 사용하면 좋을 것 같다!

 


 

위의 내용은 스프링부트를 기준으로 작성했스빈다.

아래 링크의 작성자 질문을 보면 스프링 프레임워크 설정하는 방법도 나와있으니 확인해보시면 좋을 것 같습니다!

https://stackoverflow.com/questions/34048617/spring-boot-how-to-use-hiddenhttpmethodfilter

 

Spring Boot how to use HiddenHttpMethodFilter

As we all know, forms only support GET or POST methods, like this:

If our controller has a PUT mapping, we get a 405 error,

 

stackoverflow.com