처음부터 차근차근
@DeleteMapping과 @PutMapping 본문
REST API를 개발할 때
update 부분 : PostMapping -> PutMapping
delete 부분 : GetMapping -> DeleteMapping
으로 변경해보라는 조언을 받아 공부하게 되었다.
@DeleteMapping
DeleteMapping은 데이터를 delete할 때 사용하는 매핑이다.
html
<form id="delete_form" action="/board/${board.id}/delete" method="post">
<input type="hidden" name="_method" value="delete"/>
<a onclick="if (confirm('정말로 삭제하시겠습니까?')) document.getElementById('delete_form').submit();" class="btn btn-danger">삭제</a>
</form>
form에다 method="delete" 이렇게 하면 정상적으로 되지 않고,
저런식으로 hidden type을 생성하고 name="_method" value="delete" 해야 delete method로 보낼 수 있다.
controller
@DeleteMapping("/{id}/delete")
public String deleteMovie(@PathVariable int id) {
boardService.deleteBoard(id);
return "redirect:/board/list";
}
delete method로 온 요청을 delete mapping으로 받는다.
이렇게 해서 실행해보려고 했더니 웹 페이지에 error가 떴다.
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported
(요청 방법 'POST'가 지원되지 않습니다.)
즉, 서버 측에서 delete mapping을 인식하지 못했다는 뜻이다.
이 오류의 해결 방법은 아래의 블로그에서 찾을 수 있었다.
https://kth990303.tistory.com/51
[Spring] CRUD 기능 실습 중 @DeleteMapping 관련 에러
저번에 포스팅한 CRUD 실습을 이어하던 중, @DeleteMapping으로 삭제하려던 중 아래 사진과 같은 에러가 발생하였다. This application has no explicit mapping for /error, so you are seeing this..
kth990303.tistory.com
@DeleteMapping, @PutMapping 등의 최신 매핑기능을 이용하기 위해선 아래와 같은 코드를 작성해야 한다고 한다.
@Bean
public HiddenHttpMethodFilter hiddenHttpMethodFilter(){
return new HiddenHttpMethodFilter();
}
src / main / java / 패키지 / 프로젝트명Applicaition class에 다음의 내용을 추가한다.
프로젝트Application.class
@SpringBootApplication
public class NoticeboardApplication {
public static void main(String[] args) {
SpringApplication.run(NoticeboardApplication.class, args);
}
// 이 부분 추가
@Bean
public HiddenHttpMethodFilter hiddenHttpMethodFilter(){
return new HiddenHttpMethodFilter();
}
}
이렇게 했더니 서버측에서 delete mapping을 인식해서 잘 실행됐다.
@PutMapping
PutMapping은 데이터를 update할 때 사용하는 매핑이다.
사용하는 방법은 delete mapping과 유사하다.
html
<form action="/board/${board.id}/edit" method="post">
<input type="hidden" name="_method" value="put"/>
.
.
.
</form>
controller
@PutMapping("/{id}/edit")
public String update(@PathVariable int id, @Valid Board board, BindingResult bindingResult) {
if(bindingResult.hasErrors()) return "boards/edit";
boardService.updateBoard(board);
return "redirect:/board/{id}";
}
실행했더니 delete mapping과 같이 잘 수행됐다.
'Framework > Spring' 카테고리의 다른 글
스프링 이니셜라이즈를 이용한 스프링 부트 프로젝트 생성 방법 (0) | 2022.07.12 |
---|---|
Logback : 로그 색상 수정 (0) | 2022.06.22 |
Swagger (0) | 2022.05.06 |
Logback (0) | 2022.05.05 |
profile이용해서 bean 선택하여 사용하기 (0) | 2021.10.02 |