[ Spring ] Basic REST- 5. DTO 구현

jwkwon0817·2023년 9월 2일
0

Backend

목록 보기
30/32
post-thumbnail

일단 만들어야 할 DTO는 두 가지다.

BoardDto, BoardRequestDto이다.

BoardDto는 Response할 때 사용하고, BoardRequestDto를 Request를 받을 때 사용한다.


BoardDto.java

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를 붙여줬다.


BoardRequestDto.java

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로 쉽게 바꾸기 위한 메서드다.

profile
SRIHS 119th SW

0개의 댓글