본문 바로가기
IT/Java

@Valid 를 Dto 에 적용하기

by 성준하이 2024. 8. 18.
반응형

Dto에 Valid를 사용하여 RequestBody에서 받기 위해서는 이전에 다룬 글이 있다.

자세한 내용은 아래 참고 포스팅 참고 바란다.

 

하지만 request로 받을때 말고 Dto를 사용하여 객체를 새롭게 만들 경우엔 어떻게 검증을 할지 아래 예제 코드를 보면서 바로 설명하겠다.

CustDto dto = CustDto.builder()
     .address("Seoul")
     .phone("012345")
     .name("thenicesj")
     .build();

우선 선언하는 곳에서 Builder 는 평상시랑 동일하게 코드를 짜주면 되고,

Dto 클래스에서 Builder 를 아래와 같이 구현해두면 된다.

..이상 생략
@NoArgsConstructor
@Data
public class CustDto {

     @Id
     @Column(name="PHONE")
     @Pattern (regexp = "010[-]?\\d{3,4}[-]?\\d{4}$", message= "폰넘버 형식 오류")
     private String phone;

     @Column(name="ADDRESS")
     private String address;

     @Column(name="NAME")
     private String name;

     @Builder
     private CustDto(String phone, String address, String name) {
         this.phone = phone;
         this.address = address;
         this.name = name;

         // 유효성 검사 수행
          validate(phone, address, name);
     }

     private void validate(String phone, String address, String name) {
         ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
         Validator validator = factory.getValidator();

         Set<ConstraintViolation<CustDto>> violations = validator.validate(this);
         if (!violations.isEmpty()) {
             StringBuilder sb = new StringBuilder();
             for (ConstraintViolation<CustEntity> violation : violations) {
                   sb.append("{"+phone+"/"+address+"/"+name+"} 데이터에 오류가 있습니다. (").append(violation.getMessage()).append(") - 데이터 skip \n");
             }
             throw new IllegalArgumentException("Invalid Entity: \n" + sb.toString());
         }
     }
}

 

핵심은 validate 를 Builder 안에서 구현해주었고, ValidatorFactory / Validator 를 사용해서 검증을 하였다.

 

정규식 관련해서는 아래 참고 포스팅 참고.


참고 포스팅

https://thenicesj.tistory.com/305

 

@Valid annotation (BindingResult, Error)(유효성 검사)

지난번에 다뤘던 포스팅 중에서 not null관련 포스팅도 존재하고, jackson 관련 포스팅도 존재한다. 둘의 공통점은 dto 등에서 변수에 설정을 걸어주는것이다. 하지만 이 둘 말고도 또다른 annotation이

thenicesj.tistory.com

https://thenicesj.tistory.com/1021

 

RequestParam 에서 @Valid 사용

이전 포스팅에서 @Valid annotation 을 사용하여 데이터 검증을 하는 법을 알아보았다.(참고 포스팅 참고) 하지만 해당 방법은 RequestBody 일 경우 사용이 가능하고RequestParam 으로 사용하는 방법을 정리

thenicesj.tistory.com

https://thenicesj.tistory.com/334

 

정규 표현식 정리(Regex)

정규표현식은 사용을 할때마다 검색하는것 같아서 이참에 직접 정리를 해보려고 포스팅을 작성해본다.  정규표현식에서 사용되는 기호를 Meta 문자라고 하는데 표현식에서 내부적으로 특정 의

thenicesj.tistory.com

 

반응형

댓글