클라이언트에서 서버로 값을 전달하고자 할 때
전달되는 데이터에 대해 유효성 검증을 수행하며 MethodArgumentNotValidException을 발생하도록 처리하는 기능을 수행하는 라이브러리다.
[참고] @Valid + @RequestBody를 함께 사용하여서 클라이언트에서 json 형태로 전송하는 데이터에 대해서 유효성 검증을 거쳐서 통과 시 로직을 수행하고 실패 시 에러를 도출합니다.
import org.springframework.web.bind.annotation.RequestBody;
// [API] 코드 추가
// @return ApiResponseWrapper<List < TemplateVO>> : 응답 결과 및 응답 코드 반환
@PostMapping("/insertCode")
@Operation(summary = "코드 추가", description = "코드를 추가하는데 사용하는 API입니다.")
public ResponseEntity<ApiResponse<Integer>> insertCode(@RequestBody @Valid CodeVO codeVO) {
Integer result = codeService.insertCode(codeVO);
ApiResponse<Integer> ar = new ApiResponse<>(result, SuccessCode.INSERT.getStatus(), SuccessCode.INSERT.getMessage());
return new ResponseEntity<>(ar, HttpStatus.OK);
}
💡 클라이언트에서 서버로 Query-String 형태로 데이터를 전송할때 이를 받기 위해 사용되는 어노테이션.
ex) Client Request -> http://localhost:8080/userId=adjh54&userNm=lee
@GetMapping("/")
public ResponseEntity<ApiResponse<CodeVO> selectTemplate(@Valid @RequestParam @Size(min = 1, max = 10) String grpCd) {
}
클라이언트에서 서버로 Rest 형태로 전송되는 데이터를 받기 위해 사용되는 어노테이션.
ex) Client Request -> http://localhost:8080/{userId}/userName
@GetMapping("/{userId}/{userNm}")
public ResponseEntity<ApiResponse<CodeVO>> selectTemplate(@Valid @PathVariable @Size(min = 1, max = 10) String userId, @Valid @Size(min = 1, max = 10) @PathVariable("userNm") String userNm) {
}
분류 | @Valid | @Validated |
---|---|---|
용도 | 클라이언트로 부터 RequestBody 형태(객체)로 넘어오는 데이터에 대해 유효성 검증을 위해 사용됩니다 | 클라이언트로 부터 RequestBody 형태(객체)로 넘어오는 데이터에 대해 유효성 검증을 위해 사용됩니다. |
제공 라이브러리 | Java에서 제공 | Spring Framework에서 제공 |
import 구조 | import javax.validation.Valid; | import org.springframework.validation.annotation.Validated; |
유효성 검증 실패 시 | MethodArgumentNotValidException 에러가 발생합니다 | MethodArgumentNotValidException 에러가 발생합니다. |
유효성 그룹 지정기능 | 없음 | 있음 |
Annotation | 기능 | - |
---|---|---|
@Size | 문자 길이 측정 | Int Type 불가 |
@NotNull | null 불가 | - |
@NotEmpty | null, “” 불가 | - |
@NotBlank | null , “” , “ “ 불가 | - |
@Pattern | 정규식 적용 | - |
@Max | 최대값 | - |
@Min | 최소값 | - |
@AssertTrue / False | 별도 Logic 적용 | - |
@Valid | 해당 object validation 실행 | - |
@Past | 과거 날짜 | - |
@PastOrPresent | 오늘이거나 과거 날짜 | - |
@Future | 미래 날짜 | - |
@FutureOrPresent | 오늘이거나 미래 날짜 | - |