스프링데이터 + JPA/API 개발

1. 회원 등록 API

sdafdq 2023. 11. 12. 13:22
@RestController
@RequiredArgsConstructor
public class MemberApiController {
    private final MemberService memberService;

    @PostMapping("/api/v1/members")
    public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member){
        Long id = memberService.join(member);
        return new CreateMemberResponse(id);
    }

    @PostMapping("api/v2/members")
    public CreateMemberResponse saveMemberV2(@RequestBody @Valid CreateMemberRequest request){
        Member member = new Member();
        member.setName(request.getName());

        Long id = memberService.join(member);
        return new CreateMemberResponse(id);
    }

    @Data
    static class CreateMemberRequest{
        @NotEmpty
        private String name;
    }
    @Data
    static class CreateMemberResponse{
        private Long id;

        public CreateMemberResponse(Long id) {
            this.id = id;
        }
    }
}

@RestController가 json형식으로 return하는거임.

객체 return하면 알아서 필드:값 json 형식으로 파싱해서 보내줌. 

https://qwefdg3.tistory.com/260

https://qwefdg3.tistory.com/270

 

@RequestBody해서 요청바디를 받는데 그걸 Member에 파싱해서 받는다.

@Valid 해서 검증도 한다.

https://qwefdg3.tistory.com/383

https://qwefdg3.tistory.com/387

 

member가 그렇게 오면 save를 해 준다.

그럼 db에 등록이 될거고,

@RestController이기에 객체를 return하면 json 형태로 바꿔서 보낸다.

 

그 다음 v2.

Dto같은 부류를 새로 만들었다. 사실 엔티티 그대로 노출하는 것은 위험하다.

엔티티는 사실 손댈 일이 꽤 많은데, 엔티티를 손대면 API스펙이 같이 바뀌게 되는 꼴이다.

그래서 저렇게 따로 API 스펙용으로 무조건 따로 만들어서 사용한다.

 

 

 

 

'스프링데이터 + JPA > API 개발' 카테고리의 다른 글

6. 지연로딩과 조회성능 최적화  (0) 2023.11.13
5. 조회용 샘플 데이터 입력  (0) 2023.11.12
4. API 성능 최적화  (0) 2023.11.12
3. 회원 조회 API  (0) 2023.11.12
2. 회원 수정 API  (0) 2023.11.12