본문 바로가기
developing/spring

Entity 및 DTO, ResponseDTO 작성

by pikkaso 2023. 7. 26.

기본적으로 Entity는 DB의 Table에 매핑해줄 java structure를 작성해주는 것이라 간단하다.

@Entity
@Getter
@Setter
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
public class Todo {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column
    private String title;

    @Column
    private boolean done;

}

 

그 다음은 TodoDTO인데, controller에서 RestAPI를 통해 전달 받을 Todo 정보들을 담은 객체로 보면 된다.

TodoDTO는 반드시 인자없는 생성자를 만들어야 하며, Getter또한 있어야 Entity를 build()를 할 수 있다.

그 외에도 controller나 여타 코드 내에서 Entity를 작성하거나, 반대로 Entity를 DTO로 변환시키기 위한 메쏘드들을 다음과 같이 내부에 만드는 것이 유용하다.

 

@RequiredArgsConstructor
@Getter
@Setter
@Builder
public class TodoRequestDTO {

    private Long id;
    private String title;
    private boolean done;


    public TodoRequestDTO(final Todo entity){
        this.id = entity.getId();
        this.title = entity.getTitle();
        this.done = entity.isDone();
    }


    public static Todo toEntity(final TodoRequestDTO dto){
        return Todo.builder()
                .id(dto.getId())
                .title(dto.getTitle())
                .done(dto.isDone())
                .build();
    }
}

 

각각 위에서 부터, entity 받으면 DTO 생성시키는 생성자,

반대로 DTO 받으면 entity 변환하는 함수인데, 직관적으로 이해 하기가 쉽다.

 

 

 

마지막으로 ResponseDTO class이다. 사실 굳이 작성할 필요는 없지만, ResponseEntity대신 custom이 우선은 용이하도록 작성을 하였다.

@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class ResponseDTO<T> {

    private String error;
    private List<T> data;
}

 

이렇게 하여 controller를 작성하면 다음과 같다.

    @PostMapping("/create")
    public ResponseEntity<?> createTodo(@RequestBody TodoRequestDTO todoRequestDTO){

        List<Todo> entities = todoService.create(todoRequestDTO);
        List<TodoRequestDTO> dtos = entities.stream().map(TodoRequestDTO::new).toList();

        ResponseDTO<TodoRequestDTO> response = ResponseDTO.<TodoRequestDTO>builder().data(dtos).build();

        return ResponseEntity.ok().body(response);
    }

entity List 형식은 stream()을 통해 원소들을 spread하고 각 내부 원소에 대해 map을 통해 DTO로 (여기서는 DTO 생성자를 통해)  객체를 DTO로 변환하고 list화 하였고,

ResponseDTO 는 dto를 T타입에 넣어 변환시키는 형식이다.

 

아직까진 예외처리까지 고려하지는 않았지만 추후에 예외처리를 할 예정이다.

'developing > spring' 카테고리의 다른 글

WebSecurity 코드 (이론x)  (0) 2023.09.17
MockMvc를 이용한 Test  (0) 2023.07.29
JpaRepository 사용법  (0) 2023.02.27
JdbcTemplate을 이용한 기본 CRUD구현  (0) 2023.01.31
SpringBoot 기본 세팅 및 CRUD  (0) 2023.01.18

댓글