@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 |