본문 바로가기

Java, JavaScript/Spring Boot

[Spring Boot] POST 요청을 사용하여 Entity 생성하기

728x90

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);
}

 

위의 함수는 다음의 과정을 수행합니다.

 

  1. CreateMemberRequest의 구조에 맞는 데이터를 입력받도록합니다.
  2. 데이터가 입력되었다면 Member의 createMember 함수를 통해서 정해진 데이터를 넘겨주어 member를 생성해줍니다.
  3. memberService를 사용하여 member를 등록해줍니다.
  4. 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은 개발에 더 집중할 수 있는 편의를 봐주는 것 같습니다.

728x90