Java/Spring

[Spring] @DeleteMapping 사용방법

뉴벡엔드 2024. 4. 2. 15:46

 

@DeleteMapping

 

HTML 폼은 기본적으로 'GET'과 'POST' 메소드만 직접 지원합니다. 그렇기 때문에, 'DELETE' 메소드를 사용하기 위해서는 몇 가지 우회 방법을 사용해야 합니다. Thymeleaf와 Spring을 사용할 때, _method 오버라이드를 사용하여 DELETE 요청을 시뮬레이션할 수 있습니다. 이 방법은 HTML 폼에서 POST 메소드를 사용하지만, 요청이 컨트롤러에 도달할 때 DELETE로 해석되도록 합니다.

 

 

<form th:action="@{/item/{id}(id=${item.id})}" method="post">
    <input type="hidden" name="_method" value="delete" />
    <input type="submit" value="Delete"/>
</form>

 

 

@Controller
public class ItemController {

    @DeleteMapping("/item/{id}")
    public String deleteItem(@PathVariable("id") Long id) {
        itemService.delete(id); // id에 해당하는 항목을 삭제하는 서비스 메소드
        return "redirect:/items"; // 삭제 후 리다이렉트될 경로
    }
}

 

 


 

`Request method 'POST' not supported` 오류 메시지 해결방법

 

클라이언트는 DELETE 메소드를 사용하여 요청을 보내려고 했으나 실제로는 POST 메소드로 요청이 전송된 것으로 보입니다.

 

HiddenHttpMethodFilter 활성화 확인: _method 오버라이드 기능을 사용하는 경우, Spring에서 HiddenHttpMethodFilter가 활성화되어 있어야 합니다. Spring Boot를 사용하는 경우, 이 필터는 기본적으로 활성화되어 있습니다. 하지만 명시적으로 비활성화한 경우 또는 Spring Boot를 사용하지 않는 경우, 필터를 수동으로 등록해야 할 수 있습니다

 

 

1. application.properties 또는 application.yml 설정 확인

# application.properties
spring.mvc.hiddenmethod.filter.enabled=true

 

또는

 

# application.yml
spring:
  mvc:
    hiddenmethod:
      filter:
        enabled: false

 

 

2. 수동으로 HiddenHttpMethodFilter 등록

 

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

@Configuration
public class WebConfig {

    @Bean
    public FilterRegistrationBean<HiddenHttpMethodFilter> hiddenHttpMethodFilter() {
        FilterRegistrationBean<HiddenHttpMethodFilter> filterRegistrationBean = new FilterRegistrationBean<>(new HiddenHttpMethodFilter());
        filterRegistrationBean.addUrlPatterns("/*"); // 모든 경로에 대해 적용
        return filterRegistrationBean;
    }
}

 

 

반응형