✅ 모임 취소

Yuri Lee·2020년 12월 1일
0

삭제 요청을 어떻게 보낼까?

  • POST “/study/{path}/events/{id}/delete”
  • DELETE “/study/{path}/events/{id}

DELETE를 쓰려면

  • HTML의 FROM은 method로 GETPOST만 지원한다. DELEET는 지원하지 않는다.
    • 그러면 rest api 의 의미가 있을까? .. 그냥 html 이 form tag 가 지원하지 않는 것임, 자바스크립트 사용하면 보낼 수 있음.
    • 다른 클라이언트들은 보낼 수 있음.
    • 하지만 form을 쓰면서 delete로 mapping을 받고 싶다면 , 그 경우라고 가정하자.
    • https://www.w3.org/TR/html4/interact/forms.html#h-17.3

일관성을 지키기 위해서는 PostMapping 을 사용하는 게 좋다.

	@PostMapping("/events/{id}/delete")
	public String cancelEvent(@CurrentAccount Account account, @PathVariable String path,
							  @PathVariable Long id){
		...
	}

하지만 파라미터 중 @PathVariable String path! 일반화 시킬 수 없다. 이벤트 id 같은 경우는 event로 읽어오니까 가능하긴 하겠지만 스터디와 같은 경우는 다양한 방법으로 읽어온다. 어떤 것은 스터디가 있는지, 어떤 것은 권한이 있는지, 최적의 데이터만 가져오도록 또다른 repository를 사용하기도 하고 .. 그래서 일관된 path를 사용할 수 없다.

application.properties

  • 설정 필요

타임리프 th:method

<form th:action="@{'/study/' + ${study.path} + '/events/' + ${event.id}}" th:method="delete">
	<button class="btn btn-primary" type="submit" aria-describedby="submitHelp">확인</button>
</form>
  • th:method="delete" : 타임리프를 사용해서 delete라는 메서드를 설정, form 의 method는 post이고 _method 에다가 delete 라는 값을 넣어주는 것이다.

form의 method는 post 인데, input 안에 _method, delete 필드가 추가되었음을 볼 수 있다.
나중에 일관성을 위해 수정할 예정, 지금은 이런 방법이 있다는 것을 알고 있어라!


출처 : 인프런 백기선님의 스프링과 JPA 기반 웹 애플리케이션 개발

profile
Step by step goes a long way ✨

0개의 댓글