- Data Transfer Object의 약자로서, 데이터만 전달 해준다.
- 기본적으로 entity 항목은 DB 테이블과 매핑이 되므로 특정 항목을 제거하고 클라이언트에 전달 할 수 없다.
- 따라서 entity를 DTO로 한번 더 감싼 후 원하는 항목들만 조합하여 클라이언트에 전달하기 위해 사용한다.
- 혹은 다양한 entity 항목들을 하나의 DTO로 조합할 수도 있다.
- 물론 관심도 분리등 다른이유도 있지만, 이 부분은 개발자 입장에서만 유효한 의미라 건너 뛴다.
- 정의는 class 로 정의하고, controller 에서 DTO 생성 및 함수호출을 하여 동작한다.
- 정의
- 간단하다. DTO로 사용할 클래스를 만들고, entity로 전환하는 함수, entity를 받아 DTO를 설정하는 함수를 만들면 된다.
- Data 어노테이션 활용
- Data 어노테이션은 Getter, Setter, RequiredArgsConstructor 등을 한데 모은 어노테이션이다.
package com.example.test1.test1;
import groovyjarjarantlr4.v4.runtime.misc.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
@Data
public class testclassDTO
{
@NotNull
public String value1;
@Size(min=10, max=11)
public String value2;
public entity1 toEntity()
{
entity1 ent = new entity1();
ent.setName(value1);
ent.setAddress(value2);
return ent;
}
public void fromEnt(entity1 ent)
{
value1 = ent.getName();
value2 = ent.getAddress();
}
}
- 호출은 다음과 같다
package com.example.test1.test1;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestAttribute;
@Controller
public class javacontroller {
private final ServiceClass_Java serviceItem;
public javacontroller(ServiceClass_Java sv)
{
serviceItem = sv;
}
@GetMapping("/java")
public String controllerTest(@RequestAttribute("name") String name) {
entity1 ent = serviceItem.GetEntity(name);
testclassDTO dto = new testclassDTO();
dto.fromEnt(ent);
return dto.value1;
}
}
- Build 어노테이션
- 클래스형 변수를 기존방식으로 생성하는게 아닌 롬복 build를 통해 체이닝 형식으로 생성한다.
- DTO 클래스 (build 어노테이션 대상)
- import lombok.Builder; 추가
- 클래스 앞에 @Build 어노테이션 추가
package com.example.test1.test1;
import groovyjarjarantlr4.v4.runtime.misc.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.Builder;
@Data
@Builder
public class testclass_java
{
@NotNull
public String value1;
@Size(min=10, max=11)
public String value2;
public entity1 toEntity()
{
entity1 ent = new entity1();
ent.setName(value1);
ent.setAddress(value2);
return ent;
}
public void fromEnt(entity1 ent)
{
value1 = ent.getName();
value2 = ent.getAddress();
}
}
////////컨트롤러
package com.example.test1.test1;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestAttribute;
@Controller
public class javacontroller {
private final ServiceClass_Java serviceItem;
public javacontroller(ServiceClass_Java sv)
{
serviceItem = sv;
}
@GetMapping("/java")
public String controllerTest(@RequestAttribute("name") String name) {
entity1 ent = serviceItem.GetEntity(name);
testclass_java dto = testclass_java.builder().value1("").value2("").build();
dto.fromEnt(ent);
return dto.value1;
}
}
'Backend > SpringBoot' 카테고리의 다른 글
Bean 어노테이션 (W.Configuration, Component 어노테이션) (1) | 2024.10.25 |
---|---|
Spring Security (Configuration, EnableWebSecurity 어노테이션) (0) | 2024.10.25 |
Paging (0) | 2024.10.24 |
[기본구조4] 서비스 (0) | 2024.10.23 |
응답으로 템플릿 리턴하기 (model, 타임리프, layout) (0) | 2024.10.23 |