Spring MVC(DTO/Data Transfer Object)

Rina's·2023년 6월 12일

코드스테이츠

목록 보기
40/96

DTO

Data Transfer Object
데이터 전송 객체

  1. 코드의 간결화
  2. 데이터 유효성 검증

HTTP 요청/응답의 DTO 적용(JSON 형식)

  1. DTO 클래스를 생성
  2. 요청 데이터 항목을 필드, 애너테이션 추가
  3. 각 멤버 변수의 getter 추가
  4. request body가 필요한 핸들러 파라미터에 DTO객체, @Valid 사용

@Valid
핸들러 메서드 파라미터에 붙어 객체에 유효성 검증을 적용
클래스 내부 필드에도 에너테이션을 지정(하단 참조)

@RequestBody
JSON 형식의 Request Body를 Dto클래스의 객체로 변환(역직렬화)

@ResponseBody
DTO 클래스의 객체를 JSON 형식의 Response Body로 변환(직렬화)

핸들러 메서드의 리턴 값이 ResponseEntity일 경우, JSON 형식으로 자동변환 하는 것과 같은 원리(HttpMessageConverter)

DTO 클래스에 유효성 검증 적용

유효성 검증을 위한 의존 라이브러리 추가, Spring Boot의 Starter필요
build.gradle - dependencies -
'org.springframework.boot:spring-boot-starter-validation’ 추가 선행

핸들러 메서드 파라미터(DTO객체)에 @Valid 적용,
각 필드에@NotBlank @Email @Pattern 등의 애너테이션 적용
@Pattern(regexp = "정규 표현식", message ="내용")

정규 표현식

^ 문자열의 시작
$ 문자열의 끝
\s 공백 문자열
\S 공백이 아닌 문자열
* * 앞에 평가할 대상이 0개 또는 1개 이상인지
? ? 앞에 평가할 대상이 0개 또는 1개 인지
+ + 앞에 평가할 대상이 1개인지

@PathVariable(URI) 유효성 검증

@PathVariable("member-id") @Min(1) long memberId
-> 1 이상의 숫자일 경우에만 유효함
유효성 검증 사용시 꼭 클래스 레벨 URI에 @Validated를 넣어줄것

Hibernate Validator

Jakarta Bean Validation의 구현체
유효성 검증을 위한 내장 애너테이션
Custom Validator도 가능

DTO적용 실습

Post DTO적용
post메서드(postCofee)의 인수로 DTO클래스(CoffeePostDto) 사용
@valid 로 패턴검사 @RequestBody로 리퀘스트를 이것으로 받아올 것을 설정
request body를 받은 coffePostDto에서
Request Body에 필수적으로 들어갈 korName, engName, price를
getter으로 호출한 뒤 setter로 할당

Patch의 DTO적용
Request Body 필수값이 없음으로 DTO클래스(CoffeePatchDto)만 적용
@PatchVariable의 주소값을 양수로 제한하기 위해 @positive사용

CoffeePostDto

profile
갭린이 리나

0개의 댓글