@Valid와 rejectValue()로 유연하게 유효성 검증하기
2024. 7. 2. 10:48ㆍLanguage/Java
@Valid 어노테이션과 BindingResult 객체를 통해 검증을 수행하면, 태그 하나당 글자 길이나 각 필드 값을 서로 비교해야 하는 상대적으로 복잡한 검증이 필요할 때 유용하다.
@Valid 어노테이션
- 주로 Controller 또는 Service 계층에서 사용자로부터 받은 데이터 처리 시 사용
- DTO나 Form 클래스에 적용하여 요청 파라미터의 유효성을 검사
- @NotBlank, @Size, @Pattern 등 다양한 검증용 어노테이션 제공
- 단점은 복잡한 비교 검증 시 유연성 부족, 별도의 Validator클래스 또는 수동 검증 로직 필요
public class Board {
@NotBlank(message = "제목을 입력하세요")
@Size(max = 100, message = "100자 이하로 작성하세요")
private String title;
}
public class BoardController {
@PostMapping("/p")
public String postBoard(@Valid Board board, BindingResult error) {
if (error.hasErrors()) {
return "/";
}
return "redirect:/success";
}
}
rejectValue() 메소드
- Srping Framework에서 제공하는 유효성 오류 등록 메서드
- 직접 검증 로직을 구현하여 오류를 발생시킬 경우 사용
- 파라미터
- fileName : 오류가 발생한 필드 이름
- errorCode : 오류 코드
- defaultMessage : 오류 코드에 해당하는 메시지가 없는 경우 사용하는 기본 메시지
혼용법
비교 검증 등 단순한 필드 단위로 유효성 검사를 수행할 수 없을 때, 직접 검사 로직을 구현하고 rejectValue() 메소드를 사용하여 오류를 등록
@Controller
public class BoardController {
@Autowired
private BoardService boardService;
@PostMapping("/boards")
public ResponseEntity<Board> createBoard(@Valid @RequestBody Board board, BindingResult error) {
if (error.hasErrors()) {
return ResponseEntity.badRequest().body(null);
}
// 게시글 제목과 내용의 길이 비교 검증
if (board.getTitle().length() > board.getContent().length()) {
error.rejectValue("content", "content.length", "내용 길이는 제목 길이보다 커야 합니다.");
return ResponseEntity.badRequest().body(null);
}
Board createdBoard = boardService.createBoard(board);
return ResponseEntity.ok(createdBoard);
}
}
'Language > Java' 카테고리의 다른 글
JAVA 싱글톤 알아야 할 것 (0) | 2024.07.01 |
---|---|
Redirect VS Forward 개념 및 특징 (0) | 2024.06.16 |
세션과 쿠키 : Spring Boot를 활용한 세션 관리와 자동 로그인 구현 (0) | 2024.06.16 |
추상 클래스와 인터페이스 차이점 이해하기 (0) | 2024.04.15 |