[Spring] 스프링 레거시 - 초기설정(3)

Inung_92·2023년 3월 1일
2

Spring

목록 보기
9/15
post-thumbnail

이번 게시글에서는 Rest API를 준수하기 위하여 http 메소드를 사용하는 경우에 GET과 POST 두가지 방식만 지원하는 브라우저가 있을 수 있다. 그럴때는 오류가 발생하는데 이러한 오류를 방지하고 해결하기 위하여 사용하는 Spring의 객체를 알아보자.

⚡️ HiddenHttpMethodFilter란?

📖Rest API 방식에서 http 메소드를 준수하여 동작하게 하기 위하여 POST 방식의 Overloaded Post를 지원하는 Spring 프레임워크의 객체

HiddenHttpMethodFilter(이하 히든필터)는 web.xml에 선언하여 사용할 수 있으며, POST 방식에 히든으로 PUT, DELETE 등의 메소드를 설정하여 전송하면 해당 메소드를 분석하여 요청을 처리하는 역할을 해준다.

⚡️ web.xml 선언

POST에 숨겨진 PUT, DELETE 메서드 식별을 위하여 먼저 필터로 설정을 해주겠다. 아래 코드를 web.xml의 encodingFilter와 인접한 위치에 작성해주자.

<filter>
  <filter-name>httpMethod</filter-name>
  <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>httpMethod</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

위와 같이 작성을 끝내면 서버로 요청이 발생할 시 DispatcherServlet이 요청을 접수하기 전에 해당 요청에 대한 메소드를 분석해줄 것이다.

⚡️ Overloaded POST 사용

Overloaded POST를 사용하는 방법은 두 가지가 있다. 하나는 ajax를 통한 방식이며, 나머지 하나는 form 태그를 이용하는 것이다.

아래 코드를 통해 두 방법 모두 알아보자.

🖥️ ajax 사용

$.ajax({
	type: "delete",
  	url: "요청URL",
  	headers:{
    	"Content-Type": "application/json",
		"X-HTTP-Method-Override": "DELETE"},
    }
});

위와 같이 ajax의 헤더에 X-HTTP-Method-Override를 명시해주면 된다. 다음 방법은 html의 form 태그를 이용한 방법이다.

🖥️ form 태그 사용

<form method="post">
	<input type="hidden" name="_method" value="put"/>
</form>

위와 같이 input의 타입을 hidden으로 선언하고 해당 태그의 name을 '_method'로 선언해준뒤 value에 해당하는 메소드의 형태를 지정해주면 된다. 이렇게 선언하고 요청을 보내면 스프링의 히든필터 객체가 해당 요청을 분석하여 메소드 방식에 맞는 매핑을 처리하는 것이다.


마무리

이렇게해서 이번 게시글에서는 Rest API를 준수하기 위하여 http 메소드를 오류없이 통신하는 방법에 대해서 알아보았다.

web.xml에 설정하는 방법 외에 직접 .java를 통해 빈으로 등록할 수 있으니 해당 방법이 궁금한 사람들은 검색을 통해 알아보자.

그럼 이만.👊🏽

profile
서핑하는 개발자🏄🏽

0개의 댓글