[Spring API 실습 #-01] 회원 등록 API
- 📚 Spring/Spring JPA 실습
- 2021. 3. 14.
꼭 API스펙을 위한 별도의 DTO를 만들어 사용하는것이 제일 좋다.
실무에서는 API 만들때 엔티티를 직접 받지도 말고 보내지도 말라.(직접 노출X)
MemberApiController.java
package com.jpabook.api;
import com.jpabook.domain.Member;
import com.jpabook.service.MemberService;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
@RestController// = @Controller + @ResponseBody을 합친거다
@RequiredArgsConstructor
public class MemberApiController {
private final MemberService memberService;
// 엔티티를 받지발고 보내지도 말라!!
// api스펙을 위한 별도의 DTO를 만들어 사용하는게 제이 좋다!!
@PostMapping("/api/v1/members")
public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member) {
// @RequestBody는 해당 컨트롤러로 날라온 json데이터를 Member로 변환해준다.
Long id = memberService.join(member);
return new CreateMemberResponse(id);
}
// v2
// Member 엔티티바꾸면 다 에러가난다.
// 장점 : api 스펙이 바뀌지 않는다.
/**
* 등록
* @param request
* @return
*/
@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;
}
}
}
Validation 같은 경우는 DTO에 정의해서 사용하는 것이 좋다.
그 이유는 Entity마다 not null 등 사양이 다를 수 있기 때문이다.
참고로 Front-End개발자는 어떤 컬럼에 Validation이 걸려있는지 모를수가 있으니 주의해야 한다.
Member.java
package com.jpabook.domain;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotEmpty;
import java.util.ArrayList;
import java.util.List;
@Entity
@Getter @Setter
public class Member {
@Id @GeneratedValue
@Column(name = "member_id")
private Long id;
private String name;
@Embedded //내장타입
private Address address;
@OneToMany(mappedBy = "member")
private List<Order> orders = new ArrayList<>();
}
'📚 Spring > Spring JPA 실습' 카테고리의 다른 글
[Spring API 실습 #-03] 회원 조회 API (0) | 2021.03.19 |
---|---|
[Spring API 실습 #-02] 회원 수정 API (0) | 2021.03.14 |
[Spring JPA 실습 #15] 주문목록 검색 (0) | 2021.03.13 |
[Spring JPA 실습 #14] 상품 주문 (0) | 2021.03.13 |
[Spring JPA 실습 #12] 상품 수정 JPA 실습 #12] 상품 수정 (0) | 2021.03.11 |