인프런 커뮤니티 질문&답변

개발좌님의 프로필 이미지
개발좌

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

상품관리 삭제 구현을 해봤는데 잘안되서 질문드립니다.

작성

·

1.1K

1

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.
 
안녕하세요.
MVC1 강의를 듣고 삭제를 따로 구현해보고있는데, 에러가 나서 질문드립니다.
 
먼저 itemRepository에 삭제 코드를 구현했습니다.
map 형태라서 ItemId를 key값으로 받아서 remove 메서드를 이용해 삭제하려고 작성했습니다.
테스트 까지 완료했습니다
// 삭제
public void delete(Long ItemId){
store.remove(ItemId);
}
Controller에서는 해당코드로 작성했습니다.
// 상품삭제하기
@DeleteMapping("/delete/{itemId}")
public String deleteItem(@PathVariable Long itemId){
itemRepository.delete(itemId);
return "redirect:/basic/items";
}
 
html에서는 item.html(상세페이지) 에 삭제 버튼을 넣었습니다.
<div><a th:href="@{/basic/items/delete/{itemId}(itemId=${item.id})}">삭제</a></div>
 
이렇게 하고 삭제버튼을 누르면
http://localhost:8080/basic/items/delete/2
 

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Sat Jun 11 00:39:51 KST 2022
There was an unexpected error (type=Method Not Allowed, status=405).
 
해당 에러 메세지가 뜨는데
혹시 잘못된 곳이 어디인지 알 수 있을까요??
 
 
정리하면, 
삭제버튼을 누르면 /basic/items/delete{itemId} 가 실행되서,
컨트롤러에 있는deleteItem 이 호출되어서 실행되고,
이후 redirect로 items 화면으로 이동되는것으로 이해했는데,
 
오류가 왜 나는지 모르겠습니다.
 
아주 간단한 질문이지만, 부끄러움을 무릅쓰고 질문드립니다.
 
감사합니다!
 
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
오류 메세지보고
@DeleteMapping 을 @GetMapping 으로 바꾸니 작동이 잘 되네요..
 
삭제 맵핑을 @GetMapping 으로 왜 작성을 해야하는지 이해가 안갑니다 ㅠㅠ
 
데이터에 저장/수정/삭제는 @PostMapping으로 해야하는것으로 알고있는데,
제가 잘못이해하고 있는건지 궁금합니다.
 
또한 @DeleteMapping은 언제 사용하면 되는건지 궁금합니다.
 
 
 
 

답변 1

0

안녕하세요. 윤종님, 공식 서포터즈 OMG입니다.

@DeleteMapping 대신 @GetMapping으로 확인해주세요


감사합니다.

개발좌님의 프로필 이미지
개발좌
질문자

OMG님 안녕하세요!

@GetMapping 으로는 정상작동합니다

@PostMapping 이나 @DeleteMapping 을 사용하고 싶으면 따로 설정해주어야 할게 있는 지 궁금합니다

a태그는 화면이동을 처리하여 http Get 메서드가 동작합니다.

JS를 사용하여 api 통신으로 처리하거나 타임리프를 사용한다면 다음과 같이 스프링, 타임리프 지원 기능을 이용할 수 있습니다.

https://java.tutorialink.com/how-to-send-put-patch-delete-requests-in-thymeleaf-template/

 

 
개발좌님의 프로필 이미지
개발좌
질문자

OMG 님 답변주셔서 감사합니다.

확인해보고 다시 시도해보겠습니다!

감사합니다 !

개발좌님의 프로필 이미지
개발좌

작성한 질문수

질문하기