//요청 값으로 Member 엔티티를 직접 받음
//= 엔티티를 RequestBody에 직접 매핑
@PostMapping("/api/v1/members")
public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member){
Long id = memberService.join(member);
return new CreateMemberResponse(id);
}
@Data
static class CreateMemberResponse{
private Long id;
public CreateMemberResponse(Long id){
this.id = id;
}
→ Member entity에 제약 조건을 걸어두지 않았기 때문에 데이터를 입력하지 않고 send 해도 null로 데이터가 입력됨
따라서 Member entity에 @NotEmpty 제약 조건을 준다!
//...
@NotEmpty //값이 없으면 안됨
@Column(name = "name")
private String name;
//...
@NotEmpty와 같은 제약을 주면 치명적 단점이 존재
-> api 요청 스펙에 맞춰서 별도의 dto를 만들자!
엔티티를 RequestBody에 직접 매핑 하면 생기는 문제점
🍀 해결 방법
entity 대신 별도의 DTO를 만들어 파라미터로 받는다.
//entity 대신 dto를 RequestBody에 매핑
@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;
}