본문 바로가기

Study/Spring

Spring. 폼 데이터 값 검증 / Validator

1, Validator 객체

- JavaScript를 이용하는 것은 클라이언트에서 검사하는 방법이고 이 방법은 Validator 인터페이스를 이용하여 서버에서 검사하는 방법이다.

@Controller
public class MemberController {
@RequestMapping("/insertForm")
public String insertForm(){
return "insertPage";
}
@RequestMapping("/member/insert")
public String studentInsert(@ModelAttribute("member") Member member, BindingResult result){
String page = "insertDonePage";
MemberValidator validator = new MemberValidator();
validator.validate(member, result);
if(resutl.hasErrors(){
page = "insertForm";
}
return page;
}
}
public class MemberValidator implements Validator {
@Override
public boolean supports(Class<?> arg0){
return Member.class.isAssignableFrom(arg0); //검증할 객체의 클래스 타입 정보
}
@Override
public void validate(Object obj, Errors errors){
Member member = (Member)obj;
String memberName = member.getName();
if(memberName == null || memberName.trim().isEmpty()){
System.out.println("memberName is null or empty");
errors.rejectValue("name", "troble");
}
int memberAge = member.getAge();
if(memberAge == 0){
System.out.pritnln("memberAge is 0");
error.rejectValue("age", "troble");
}
}
}

 

2. ValidationUtils 클래스

- 위의 방법으론 데이터 검증을 위해 Validator 인터페이스의 validate() 메서드를 사용하였는데 ValidationUtils 클래스는 validate() 메서드를 좀더 편리하게 사용하도록 고안된 클래스입니다.

- 직접 만들어서 메서드를 사용하는 경우가 많으므로 알아두는 것으로 충분함

public class MemberValidator implements Validator {
@Override
public boolean supports(Class<?> arg0){
return Member.class.isAssignableFrom(arg0); //검증할 객체의 클래스 타입 정보
}
@Override
public void validate(Object obj, Errors errors){
Member member = (Member)obj;
/*
String memberName = member.getName();
if(memberName == null || memberName.trim().isEmpty()){
System.out.println("memberName is null or empty");
errors.rejectValue("name", "troble");
}
*/
ValidationUtils.rejectIfEmptyOrWhitespase(errors, "name", "troble");
int memberAge = member.getAge();
if(memberAge == 0){
System.out.pritnln("memberAge is 0");
error.rejectValue("age", "troble");
}
}
}

 

3. @Valid  /  @InitBinder

- 데이터 검증을 하는데 직접 호출하지 않고 스프링 프레임워크에서 호출하는 방법

-1. 라이브러리 dependency 추가

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.2.0.Final</version>
</dependency>
view raw pom.xml hosted with ❤ by GitHub

-2. @Valid 추가

@Controller
public class MemberController {
@RequestMapping("/insertForm")
public String insertForm(){
return "insertPage";
}
@RequestMapping("/member/insert")
public String studentInsert(@ModelAttribute("member") @Valid Member member, BindingResult result){
String page = "insertDonePage";
/*
MemberValidator validator = new MemberValidator();
validator.validate(member, result);
*/
if(resutl.hasErrors(){
page = "insertForm";
}
return page;
}
}

-3. @InitBinder 추가

@InitBinder
protected void initBinder(WebDataBinder binder){
binder.setValidator(new MemberValidator());
}

 

 

 

'Study > Spring' 카테고리의 다른 글