지난번에 다뤘던 포스팅 중에서 not null관련 포스팅도 존재하고, jackson 관련 포스팅도 존재한다.
둘의 공통점은 dto 등에서 변수에 설정을 걸어주는것이다.
하지만 이 둘 말고도 또다른 annotation이 존재하는데 그것들에 대해서 잠깐 소개 하고 valid annotation으로 한번에 유효성 검증을 하는 법에 대해서 소개해보려고 포스팅을 작성한다.
위에 두가지 경우에 대해서는 아래 참고 포스팅을 참고해보길 바란다.
오늘 사용할 annotation 관련은
import javax.validation.constraints.*;
임포트를 따른다.
Anotation | 제약조건 |
@Size(min=,max=) | 문자열, 배열등의 크기가 만족하는가? |
@Pattern(regex=) | 정규식을 만족하는가? |
@Max(숫자) | 지정 값 이하인가? |
@Min(숫자) | 지정 값 이상인가 |
@Future | 현재 보다 미래인가? |
@Past | 현재 보다 과거인가? |
@Positive | 양수만 가능 |
@PositiveOrZero | 양수와 0만 가능 |
@Negative | 음수만 가능 |
@NegativeOrZero | 음수와 0만 가능 |
이메일 형식만 가능 | |
@Digits(integer=, fraction = ) | 대상 수가 지정된 정수와 소수 자리 수 보다 작은가? |
@DecimalMax(value=) | 지정된 값(실수) 이하인가? |
@DecimalMin(value=) | 지정된 값(실수) 이상인가? |
@AssertFalse | false 인가? |
@AssertTrue | true 인가? |
해당 어노테이션을 적절하게 dto 로 선언을 해주고 사용되는 컨트롤러 쪽에서 @Valid annotation을 사용해주면 된다.
public ResponseEntity saveMember(@Valid Member member, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(bindingResult.getAllErrors()); } } |
여기서 참고로 BindingResullt 대신에 Error를 사용해도 되는데 둘의 차이는
BindingResult는 인터페이스고, Errors 인터페이스를 상속받고 있다.
실제 넘어오는 구현체는 BeanPropertyBindingResult 인데 BindingResult대신 Errors를 사용해도 된다.
Errors 인터페이스는 단순한 오류 저장과 조회 기능을 제공한다.
BindingResult는 여기에 더해서 추가적인 기능들을 제공한다. (ex. addError())
만약 Dto 안에 또다른 Dto를 선언해둔 경우라면 해당 Dto 변수 앞에 @Valid를 넣어주면 된다.
참고 포스팅
https://thenicesj.tistory.com/303
https://thenicesj.tistory.com/253
'IT > Java' 카테고리의 다른 글
스프링 웹플럭스(webflux) (43) | 2022.08.24 |
---|---|
Optional 이란? (51) | 2022.08.23 |
querydsl 동적 쿼리 관련 (60) | 2022.08.21 |
jackson annotation 관련 (41) | 2022.08.20 |
Entity, DTO, VO 차이 (47) | 2022.08.18 |
댓글