봄수의 연구실

데이터 검증 with Spring 본문

DEV/Java

데이터 검증 with Spring

berom 2023. 5. 27. 23:16

데이터 검증 with Spring

Spring MVC에서 WebDataBinder를 통해서 데이터를 검증 할 수 있습니다

WebDataBinder는 요청 매개변수를 JavaBean 객체에 바인딩하는 Spring MVC 기능입니다.
유형 변환 및 데이터 유효성 검사를 처리합니다.

@RequestMapping("/getYoilMVC5")
public String main(@ModelAttribute MyDate date, BindingResult result){}

이 코드에서 WebDataBinder는 요청 매개변수를 MyDate 개체에 바인딩합니다.
BindingResult는 이 프로세스의 결과 및 관련 오류를 보유합니다.

@InitBinder

@InitBinder 주석은 WebDataBinder를 초기화하는 메서드를 식별합니다.
이는 기본 데이터 바인딩 동작을 사용자 지정하는 방법을 제공합니다.

즉 해당 기능이 실행 되는 순간에 바로 작동합니다

@InitBinder
public void initBinder(WebDataBinder binder) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
}

이 예에서 @InitBinder 메서드는 특정 날짜 형식을 사용하여 문자열을 Date 개체로 변환하는 CustomDateEditor를 등록하는 데 사용됩니다.

Validator

Spring MVC의 Validator 인터페이스는 객체를 검증하는 메커니즘을 제공합니다.
유효성 검사 규칙을 정의하고 개체가 해당 규칙을 충족하는지 확인할 수 있습니다.

Validator 등록 방법

<servlet>
    <servlet-name>myServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

위의 예에서 myServletweb.xml에 정의된 DispatcherServlet의 이름입니다. contextConfigLocation 매개변수는 유효성 검사기 등록을 포함해야 하는 Spring 구성 파일의 위치를 ​​지정합니다.

<beans>
    <bean id="myObjectValidator" class="com.example.MyObjectValidator"/>
    <mvc:annotation-driven validator="myObjectValidator"/>
</beans>

Spring 구성 파일에서 유효성 검사기 빈을 등록하고 <mvc:annotation-driven> 요소를 사용하여 유효성 검사를 활성화할 수 있습니다.

글로벌 유효성 검사기 및 로컬 유효성 검사기

  • Global Validator: Global Validator는 서블릿 컨텍스트에 등록되며 모든 요청 및 모델에 자동으로 적용됩니다.
  • 로컬 유효성 검사기: 로컬 유효성 검사기는 특정 컨트롤러 또는 처리기 메서드에 고유하며 연결된 모델 개체에만 적용됩니다
public class MyObjectValidator implements Validator {
    @Override
    public boolean supports(Class<?> clazz) {
        return MyObject.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        // Validation logic here
    }
}

위의 예에서 로컬 유효성 검사기 MyObjectValidatorValidator 인터페이스를 구현합니다.
즉 특정 컨트롤러 또는 처리기 메서드에 고유하며 해당 메서드와 연결된 모델 개체에만 적용됩니다.

수행하는 기능은 MyObject 인스턴스 유효성 검사를 지원하고 validate 메서드에서 유효성 검사 논리를 정의합니다.

수동 검증 및 자동 검증

수동 유효성 검사를 사용하면 유효성 검사 프로세스가 수행되는 시기와 위치를 제어할 수 있습니다.
반면에 자동 유효성 검사는 요청 매개 변수를 모델 개체에 바인딩할 때 자동으로 유효성 검사를 트리거하여 프로세스를 단순화합니다.

수동 검증
수동 유효성 검사에서는 ‘Validator’ 인스턴스의 ‘validate’ 메서드를 호출하여 유효성 검사 프로세스를 명시적으로 트리거할 수 있습니다.
이를 통해 코드의 원하는 지점에서 유효성 검사를 수행할 수 있습니다.

Validator validator = new MyObjectValidator();
MyObject object = new MyObject();
Errors errors = new BeanPropertyBindingResult(object, "myObject");
validator.validate(object, errors);

자동 검증
Spring은 WebDataBinder를 사용하여 요청 매개변수를 모델 객체에 바인딩하는 과정에서 자동 검증을 제공합니다.
요청이 이루어지면 Spring은 연관된 모델 객체에 대한 유효성 검사 프로세스를 자동으로 호출합니다.

@RequestMapping("/submit")
public String submitForm(@ModelAttribute("myObject") @Valid MyObject myObject, BindingResult result) {
    // Controller logic
}

위의 예에서 ‘@Valid’ 주석은 ​​자동 유효성 검사를 활성화하는 데 사용됩니다. MyObject 인스턴스는 submitForm 메소드가 호출될 때 자동으로 검증되며 모든 검증 오류는 BindingResult 객체에 저장됩니다.

부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>

728x90

'DEV > Java' 카테고리의 다른 글

JDBC  (0) 2023.06.02
데이터 변환 with Spring  (0) 2023.05.27
Spring MVC 예외 처리 및 상태 코드 매핑 가이드  (0) 2023.05.26
예외처리 with Spring  (0) 2023.05.26
Spring MVC의 Redirect와 Forward  (2) 2023.05.19