[ Validation ]
: 사용자의 요청 입력 값이 요구되는 조건에 맞는지 검사
- 사용자 입력값을 받는 requestDTO 에서 validate 해줘야 합니다.
( responseDTO (X) / entity (X) )
- 클라이언트 단에서도 validate 를 하겠지만
서버로 바로 접근하는 '공격' 을 막지 못하므로
=> 1.클라이언트 2.서버 3.DB
각 단에서 validate 를 해주어야 합니다.
[ 서버에서 validation ]
1. validation 라이브러리 설치
spring => jakarta bean validation api
boot => spring boot starter validation
2. requestDTO 각 Column 에 필요한 validation 어노테이션 사용
@NotNull : null 값일 경우 에러 발생시킴
@NotEmpty : 빈 문자열일 경우 에러 발생시킴
@NotBlank : null 혹은 빈문자열 에러 발생시킴
@Size(min = 2, max = 5 ) : 글자수 vaildate
==
@Min(2) @Max(5)
@JsonFormat(pattern = "yyMMdd")
@Pattern
...
3. @Validated
: Controller 에서 해당 requestDTO 가 쓰이는 부분에서 @Validated
@RequestMapping(value = "", method = RequestMethod.POST)
public ResponseEntity<?> createPost(@Validated @RequestBody PostRequestDTO postRequestDTO) {
4. BindingResult
: @Validated 된 에러 내용이 담기는 객체 ( 매개변수에 추가해서 사용 )
public ResponseEntity<?> createPost(@Validated @RequestBody PostDTO postDTO, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
return ResponseEntity
.badRequest()
.body(fieldErrors);
} ...
5. @Valid
: 두 개 이상의 데이터를 가지고 있는 상위 객체에다가 @NotBlank 같은 validation을 붙이면
안에 어떤 필드에 validation을 적용하라고 하는지 모름
=> 클래스 안에 들어가서 직접 하나하나 @NotBlank 등 검사 해주고,
=> 여기 상위 객체에서는 @Valid 붙여줘서 안에걸 검사하게 하는 것.
public class Address {
@NotBlank
private String street;
@NotBlank
private String postCode;
}
@Valid
private Address address;
'Back to the Spring' 카테고리의 다른 글
JPA Paging 처리 (Page, Pageable) (2) | 2023.01.18 |
---|---|
[ Spring ] RestAPI 만능 객체 ResponseEntity<?> (0) | 2023.01.15 |
[ Spring ] 프레임워크, DI, Entity / DTO (0) | 2023.01.15 |
[Spring Security] Authentication Failure Handler 적용 (0) | 2022.12.24 |
[ Spring Security ] OAuth2 구글 / 네이버 로그인 (2) | 2022.12.23 |