일단 만들어야 할 DTO는 두 가지다.
BoardDto, BoardRequestDto이다.
BoardDto는 Response할 때 사용하고, BoardRequestDto를 Request를 받을 때 사용한다.
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class BoardDto {
private Long id;
private String title;
private String content;
private LocalDateTime createdDate;
private LocalDateTime modifiedDate;
}
필드는 Board Entity와 동일하게 구성하면 된다.
여기서도 Builder 패턴을 사용할 것이기 때문에 @Builder를 붙여줬다.
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import me.jwkwon0817.codemosboard.domain.entities.Board;
import java.time.LocalDateTime;
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class BoardRequestDto {
@NotBlank
private String title;
@NotBlank
private String content;
public Board toEntity() {
return Board.builder()
.title(title)
.content(content)
.createdDate(LocalDateTime.now())
.modifiedDate(LocalDateTime.now())
.build();
}
}
여기서는 처음 보는 어노테이션이 있는데 바로 spring-validation의 @NotBlank
이다.
@NotBlank
는 해당 값이 Blank, 즉 빈칸이 아니라는 뜻을 가지고 있다.
따라서 입력을 받을 때 빈칸이 들어오면 오류를 반환하면서 BindingResult
로 오류가 전달된다.
그다음으로 입력받은 DTO를 엔티티로 변환하는 과정이 많으니 이 과정을 toEntity()로 묶어줬다.
그러고 나서 다시 Entity로 돌아가서 아래 코드를 추가해준다.
public BoardDto toDto() {
return BoardDto.builder()
.id(id)
.title(title)
.content(content)
.createdDate(createdDate)
.modifiedDate(modifiedDate)
.build();
}
이 메서드는 Entity를 DTO로 쉽게 바꾸기 위한 메서드다.