지난번에 다뤘던 포스팅 중에서 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
jackson annotation 관련
자바에서 , 특히 dto 에서 많이 사용하는 jackson 관련 annotation을 소개하려고 한다. dto 에 대한 정의는 아래 참고 포스팅을 확인해보는것을 추천한다. @JsonProperty 는 json을 받는 쪽에서 이름을 지정하
thenicesj.tistory.com
https://thenicesj.tistory.com/253
null 관련 (Null, isEmpty(), null관련 annotation)
먼저 자바에서 null과 isEmpty 의 차이를 알아보면 null 인스턴스가 생성되지 않은 상태, list변수가 메모리에 아무런 주소값도 참조하지 않은 상태이다. list에 값이 없을 경우 null로 체크를 하면 안된
thenicesj.tistory.com
'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 |
댓글