Validation(검증) 보충자료
BindingResult
BindingResult는 Spring Framework에서 제공하는 인터페이스로, 폼 데이터 바인딩 및 검증(Validation) 결과를 처리하기 위해 사용됩니다. 주로 컨트롤러에서 요청 데이터를 도메인 객체에 매핑한 후, 바인딩 과정에서 발생한 오류나 검증 결과를 확인하고 처리하는 데 활용됩니다.
주요 역할
1. 데이터 바인딩 결과 확인
클라이언트로부터 전달된 요청 데이터를 객체에 바인딩하는 과정에서 발생한 에러(예: 타입 불일치, 필수값 누락 등)를 확인할 수 있습니다.
2. 검증(Validation) 결과 처리
Validator나 @Valid를 사용해 검증 로직을 실행한 후 발생하는 검증 에러를 저장하고 관리합니다.
BindingResult 사용 방법
BindingResult 사용 방법BindingResult는 컨트롤러 메서드에서 검증 대상 객체 바로 다음에 위치해야 합니다. 이는 검증된 결과를 BindingResult를 통해 처리하기 위함입니다.
예제: 폼 데이터 처리와 검증
1. 도메인 객체 정의
public class User {
@NotEmpty(message = "이름은 필수입니다.")
private String name;
@Min(value = 18, message = "나이는 최소 18살 이상이어야 합니다.")
private int age;
// Getters and Setters
}2. 컨트롤러에서 BindingResult 사용
3. 뷰에서 에러 출력
주요 메서드
BindingResult는 다양한 메서드를 제공하여 검증 및 바인딩 결과를 처리할 수 있습니다.
1. 에러 확인
hasErrors(): 바인딩 또는 검증 에러가 있는지 확인hasFieldErrors(String field): 특정 필드에 에러가 있는지 확인
2. 에러 정보 조회
getAllErrors(): 모든 에러를 리스트로 반환getFieldErrors(String field): 특정 필드와 관련된 에러를 리스트로 반환getFieldError(String field): 특정 필드의 첫 번째 에러 반환
3. 에러 메시지 접근
ObjectError 또는 FieldError 객체를 통해 검증 실패 시 메시지를 가져올 수 있습니다.
getDefaultMessage(): 기본 메시지 반환getField(): 에러가 발생한 필드 이름 반환
예제: 특정 필드 에러 확인
사용 시 주의사항
BindingResult의 위치: 반드시 검증 대상 객체 바로 다음에 위치해야 합니다. 그렇지 않으면 Spring이 에러를 처리하지 못합니다.@Valid또는@Validated: 검증을 활성화하려면 검증 대상 객체 앞에 해당 어노테이션을 붙여야 합니다.커스텀 메시지: 검증 메시지는
messages.properties파일을 통해 커스텀할 수 있습니다.
타임리프와 BindingResult를 활용한 검증 및 오류 처리
타임리프에서의 th:field
th:fieldth:field는 HTML 폼 필드와 객체의 필드를 바인딩합니다.오류가 발생하면
FieldError에 보관된 값을 출력합니다.예시:
바인딩된 필드 값이 유효하지 않을 경우,
BindingResult에서FieldError객체를 사용하여 오류 메시지를 출력합니다.
errors.properties와 application.properties 설정
errors.properties와 application.properties 설정errors.properties8
검증 메시지를 정의하는 파일입니다. 예시:
application.properties
메시지 파일 위치를 지정합니다.
messages.properties와errors.properties를 모두 사용할 수 있습니다.
BindingResult와 Validator를 활용한 검증 (User 예제)
BindingResult에서 메시지 코드 처리
rejectValue와 reject
rejectValue와 rejectBindingResult에서 오류를 추가할 때FieldError나ObjectError를 직접 생성하지 않아도 됩니다.rejectValue: 필드 수준의 오류를 추가합니다.reject: 객체 수준의 오류를 추가합니다.
메시지 코드 우선순위
필드 오류 코드: 예)
required.user.userId일반 오류 코드: 예)
Required
예시 코드
검증 로직 분리
Validator 구현
Validator인터페이스를 구현하여 검증 로직을 분리합니다.
컨트롤러에서 Validator 사용
@InitBinder 설정
@InitBinder 설정특정 컨트롤러에서
Validator를 적용합니다.
글로벌 Validator 설정
WebMvcConfigurer 사용
글로벌 범위에서
Validator를 적용합니다.
위 설정을 통해 모든 컨트롤러에서
@Validated를 사용하면UserValidator가 자동으로 적용됩니다.
Thymeleaf와 함께 검증 오류 처리
Thymeleaf 템플릿
messages.properties
검증 메시지를 관리하기 위한 파일입니다.
Last updated