1, Validator 객체
- JavaScript를 이용하는 것은 클라이언트에서 검사하는 방법이고 이 방법은 Validator 인터페이스를 이용하여 서버에서 검사하는 방법이다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() 메서드를 좀더 편리하게 사용하도록 고안된 클래스입니다.
- 직접 만들어서 메서드를 사용하는 경우가 많으므로 알아두는 것으로 충분함
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 추가
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<dependency> | |
<groupId>org.hibernate</groupId> | |
<artifactId>hibernate-validator</artifactId> | |
<version>4.2.0.Final</version> | |
</dependency> |
-2. @Valid 추가
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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 추가
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@InitBinder | |
protected void initBinder(WebDataBinder binder){ | |
binder.setValidator(new MemberValidator()); | |
} |
'Study > Spring' 카테고리의 다른 글
Spring-Boot-Starter : Validation API 사용 유의사항 (0) | 2020.10.31 |
---|---|
롬복(lombok) 이용하기 (0) | 2020.03.07 |