[spring] 메모장 API Create, Read 구현

라미·2024년 2월 24일

spring

목록 보기
2/17
post-thumbnail

메모장 API Create, Read

🐥 메모장 API
기능 | Method | URL | Return
---------|------------|-----------------|-----------------------
메모 생성하기 | POST | /api/memos | MemoResponseDto
메모 조회하기| GET | /api/memos | List
메모 변경하기 | PUT | /api/memos/{id} | Long
메모 삭제하기 | DELETE | /api/memos/{id} | Long


Create & read

📝 Controller

@RestController//클라이언트에서 ajax를 통한 비동기 요청이 옴, json 데이터 반환만 해주면 됨(뷰 반환x)
@RequestMapping("/api")
public class MemoController {

    private final Map<Long, Memo> memoList = new HashMap<>();

    @PostMapping("/memos")
    public MemoResponseDto createMemo(@RequestBody MemoRequestDto requestDto) {
        // RequestDto 를 Entity로 변경해야함(DB와 연결하는 Service 클래스로~)
        Memo memo = new Memo(requestDto);

        // Memo의 max id 찾기 (이건 글을 작성하는 메서드니까 map에 size 가 있으면 작성된 글이 있다)
        // 그럼 가장 큰 글 번호 찾아서 +1 하고 id 값 세팅
        Long maxId = memoList.size() > 0 ? Collections.max(memoList.keySet()) + 1 : 1;
        memo.setId(maxId);

        // db 저장
        memoList.put(memo.getId(), memo);

        // Entity -> ResponseDto
        MemoResponseDto memoResponseDto = new MemoResponseDto(memo);

        return memoResponseDto;
    }

    @GetMapping("/memos")
    public List<MemoResponseDto> getMemos() {
        // Map to List
        List<MemoResponseDto> responseList =
                memoList.values().stream().map(MemoResponseDto::new).toList();

        return responseList;
    }
}

📝 dto & Memo

// Memo class.java
@Getter
@Setter
@NoArgsConstructor
public class Memo {
    private Long id;
    private String username;
    private String contents;

    public Memo(MemoRequestDto requestDto) {
        //client 단에서 보내준 json 데이터를 이용하여 객체 생성하기 위해 생성자 생성
        this.username = requestDto.getUsername();
        this.contents = requestDto.getContents();
    }
}

// MemoResponseDto.java
@Getter
public class MemoResponseDto {
    private Long id;
    private String username;
    private String contents;

    public MemoResponseDto(Memo memo) {
        this.id = memo.getId();
        this.username = memo.getUsername();
        this.contents = memo.getContents();
    }
}

// MemoRequestDto.java
@Getter
public class MemoRequestDto {
    private String username;
    private String contents;
}

CREATE, READ 구현 실습을 했다.
새로운 점, 아직 DB 연결을 안해서 MAP을 DB 처럼 사용했는데 서버가 꺼지기 전에
저장이 유지되서 DB처럼 저장하고 있는게 너무 신기했다.

그리고 항상 stream() 몰라서 외면하고 있었는데 for문처럼 사용하는 것이라는 걸 알게되었다! 주말에 한번 제대로 공부해야겠다...

memoList.values().stream().map(MemoResponseDto::new).toList();

Map<Long, Memo> memoList = new HashMap<>();

memoList.values().stream() : list 에 저장된 모든 값을 반환

.map(MemoResponseDto::new) : momeList의 각 요소를 MemoResponseDto 객체로 매핑

`map()` : 각 요소를 특정 함수에 매핑

`MemoResponseDto::new` : `MemoResponseDto` 클래스의 생성자를 참조

.toList() :stream을 List로 변환

0개의 댓글