Member Entity를 생성하는 API를 만들어보도록 하겠습니다. 테이블은 https://hangjastar.tistory.com/223를 참고하면 됩니다.
Member 생성 시에는 name, phone, address를 입력받도록 하겠습니다. 다음은 Member 생성 코드입니다.
@PostMapping("/api/v1/member")
public CreateMemberResponse saveMemberV1(
@RequestBody @Valid CreateMemberRequest request) {
Member member = Member.createMember(request.getName(), request.getPhone(), request.getAddress());
Long id = memberService.join(member);
return new CreateMemberResponse(id);
}
위의 함수는 다음의 과정을 수행합니다.
- CreateMemberRequest의 구조에 맞는 데이터를 입력받도록합니다.
- 데이터가 입력되었다면 Member의 createMember 함수를 통해서 정해진 데이터를 넘겨주어 member를 생성해줍니다.
- memberService를 사용하여 member를 등록해줍니다.
- CreateMemberResponse의 구조에 맞는 데이터를 반환합니다.
Spring에서 놀라웠던 점은 아래 결과와 같이 미리 Address가 생성되어있었다는 점 입니다. Address를 new Address()로 생성하여 createMember에 넘겨주어야 할 거라고 생각하여 soutv를 사용하여 address의 값을 확인하였는데, 다음과 같은 결과가 나왔습니다.
request.getAddress() = street.pet.domain.Address@28fd361c
request.getAddress().getCity() = 서울
request.getAddress().getStreet() = 컨트리 로드
request.getAddress().getZipcode() = 123-4
따라서 new Address()를 사용하여 생성할 필요 없이 createMember의 파라미터로 넘겨주면 됩니다. 이때 Post 요청에서 값을 넘길 때 city, street, zipcode 중에 하나라도 이름이 다르면 값이 제대로 넘어가지 않습니다. 대소문자도 구분합니다.
다음은 CreateMemberRequest 코드에 대해서 알아보겠습니다.
@Data
static class CreateMemberRequest {
@NotEmpty
private String name;
@NotEmpty
private String phone;
private Address address;
}
@NotEmpty는 spring validation에서 사용되는 어노테이션으로 해당 변수가 비어있으면 오류를 발생시킵니다. 따라서 CreateMemberRequest는 name, phone를 필수적으로 입력받아야 합니다. 따라서 post 요청을 보낼 때에 다음과 같은 구조를 갖추어야 합니다.
{
"name": "홍길동",
"phone": "010-1111-2222",
"address": {
"cIty": "서울",
"street": "컨트리 로드",
"zipcode": "123-4"
}
}
다음은 CreateMemberResponse 코드에 대해서 알아보겠습니다.
@Data
static class CreateMemberResponse {
private Long id;
public CreateMemberResponse(Long id) {
this.id = id;
}
}
위의 코드는 생성 시 id를 입력받아 저장하는 기능을 합니다. 따라서 Member 생성에 성공하였다면 다음과 같은 결과를 반환하게 됩니다.
{
"id": 21
}
Post 요청으로 Member를 생성하는 코드에 대해서 알아보았습니다. spring은 입력받은 데이터를 살펴보고 이름을 기반으로 자동으로 address를 만들어주었습니다. 이처럼 spring은 개발에 더 집중할 수 있는 편의를 봐주는 것 같습니다.
'Java, JavaScript > Spring Boot' 카테고리의 다른 글
[Spring Boot] Spring Rest Docs 사용하기 - POST (0) | 2021.09.16 |
---|---|
[Spring Boot] Spring Rest Docs 사용하기 - GET (0) | 2021.09.13 |
[Spring Boot] @RequestParam, @PathVariable 차이는 뭐야? (0) | 2021.09.09 |
[Spring Boot] 연관관계 메서드 설정하기 (0) | 2021.09.06 |
[Spring Boot] 동물병원 진료 데이터베이스 설계 (0) | 2021.08.31 |