TIL (Today I Learned)
TIL) 오탈과 탈자를 조심하자!
Won's log
2023. 6. 14. 00:30
문제: 메모장 만들기 실습에서 메모를 저장하는 POST 가 구현되지 않았다.
[입력 코드]
package com.sparta.memo.controller;
import com.sparta.memo.dto.MemoRequestDto;
import com.sparta.memo.dto.MemoResponseDto;
import com.sparta.memo.entity.Memo;
import org.apache.catalina.users.MemoryRole;
import org.springframework.web.bind.annotation.*;
import java.util.*;
@RestController
@RequestMapping("/api")
public class MemoController {
private final Map<Long, Memo> memoList = new HashMap<>();
@PostMapping("/mamos")
public MemoResponseDto createMemo(@RequestBody MemoRequestDto requestDto) {
// RequestDTO -> Entity 저장해야하니까
Memo memo = new Memo(requestDto);
//Memo Max ID Check
Long maxID = memoList.size() > 0 ? Collections.max(memoList.keySet()) + 1 : 1;
// memo의 최댓값, 중복을 피하기 위해 +1
memo.setId(maxID);
// DB 저장
memoList.put(memo.getId(), memo);
// Entity -> ResponseDto
MemoResponseDto memoResponseDto = new MemoResponseDto(memo);
return memoResponseDto;
}
// 조회하는 api
@GetMapping ("/memos")
public List<MemoResponseDto> getMemos() {
// Map To List
List<MemoResponseDto> responseList = memoList.values().stream()
.map(MemoResponseDto::new).toList();
// stream = values를 for문처럼 돌려줌
// Map은 튀어나오는 memo를 변환
return responseList;
}
}
에러 메시지
2023-06-13T19:40:02.948+09:00 WARN 41620 --- [nio-8080-exec-6] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' is not supported]
누가봐도 POST 메소드가 문제라는 것을 알려준다.
시도: 코드를 찬찬히 보고 혹여나 response를 request로 적은 것은 아닌지 확인하였다.
해결: 아니나다를까 여기 오타가 원인이었다. POST 메소드 안에 경로 설정에서 /memos 를 /mamos라고 적어놔서 홈페이지가 실행되지 않고 있었다.
새 앎: 오타는 개발자에게 필수불가결한(?) 점검하고 점검해야하는 예측가능한 예외(?)이니 잊지말고 체크하자.