본문으로 건너뛰기
ElastiCORE 3.0 은 릴리스 후보(RC)입니다: Maven Central 의 3.0.261022-rc1. 2.2 라인 프로젝트는 2.2 문서를 보세요.
버전: 3.0

DTO

@expose / @service 엔티티는 dto: 섹션 없이도 DTO(XxxDTO), 검색 DTO(XxxSrchDTO), 키 DTO 를 받습니다. 다른 모양이 필요할 때 DTO 를 선언합니다 - 참조 너머의 필드, 빼는 필드, 멤버 목록용 DTO(@dtype(List<OrderLineDTO>)).

model/dto.yml
dto:
OrderLineDTO:
meta: dto @template(OrderLine)
fields:
itemName: string @ref(item.name) # 응답에 품목 이름

ArticleDTO:
meta: dto @template(Article)
fields:
boardName: string @ref(board.name)
createDate: -- # 템플릿에서 뺌

ArticleSrchDTO:
meta: dto @searchable(entity=Article, pageSize=50)
fields:
title: string @search(like)
boardType: List<BoardType> @search(in) @ref(board.boardType)
createDateFrom: date @search(between)
createDateTo: date @search(between)

CustomDTO:
meta: dto
fields:
field1: string
field2: int

meta 어노테이션​

어노테이션뜻
@template(Entity)엔티티의 필드. 여러 개: @template(A, B). string(n) 은 @Size(max=n) 이 됨
@searchable(entity=E, pageSize=n)Specification 으로 바뀌는 검색 DTO. pageNumber, pageSize, sortCode 가 더해짐
@sort(field+)이 검색 DTO 의 기본 정렬 (엔티티의 것보다 우선)
@jsonview / @jsonview(auto)Jackson @JsonView 로 생성·조회·수정별 필드 가시성

필드 어노테이션​

어노테이션뜻
@ref(field.path)참조 너머의 값
--템플릿의 필드를 뺌
@view(cru)@jsonview 가시성 (c = 생성, r = 조회, u = 수정)
@readonly이 DTO 의 매핑은 이 필드를 엔티티에 쓰지 않음
!필수 - 직접 선언한 DTO 는 자기 필드에 적음 (postId: long! @ref(post.postId))

루트의 멤버​

멤버를 요청·응답에 싣는 루트는 @dtype 으로 멤버 DTO 를 적고, 그 DTO 를 선언합니다:

PurchaseOrder:
fields:
lines: List<OrderLine> @OneToMany(mappedBy="order") @dtype(List<OrderLineDTO>) @minsize(1, 'the cart is empty')

dto:
OrderLineDTO:
meta: dto @template(OrderLine)

@dtype(...) 에 적었지만 어느 dto: 섹션도 선언하지 않은 DTO 는 생성할 때 unresolved type 'OrderLineDTO' 경고가 나고 compileJava 가 실패합니다 - 생성이 성공해도 컴파일까지 하세요.