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라고 적어놔서 홈페이지가 실행되지 않고 있었다.

 

새 앎: 오타는 개발자에게 필수불가결한(?) 점검하고 점검해야하는 예측가능한 예외(?)이니 잊지말고 체크하자.