반응형
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
https://thenicesj.tistory.com/1021
https://thenicesj.tistory.com/334
반응형
'IT > Java' 카테고리의 다른 글
@Order 어노테이션 (10) | 2024.08.24 |
---|---|
CSV 파일읽어서 Repository 설정 방법 (8) | 2024.08.21 |
[Error] An Errors/BindingResult argument is expected to be declared immediately after the model attribute, the @RequestBody or the @RequestPart arguments (17) | 2024.08.17 |
ConcurrentHashMap 을 활용한 동시성 제어 (10) | 2024.08.16 |
ThreadPool Default (21) | 2024.08.15 |
댓글