패캠 초격차 Part1. Spring Framework-Ch.02 필기노트
사용자 또는 서버의 요청(http request) 에서 잘못된 내용이 있는지 유효성 검사하는 단계
개발자가 주로 챙겨야 하는 검증은 크게 두종류
스프링은 웹 레이어에 종속적이지 않은 방법으로 밸리데이션을 하려고 의도하고 있다. 주로 두가지 방법을 활용하여 밸리데이션 진행 (데이터 검증에 가까움)
- Java Bean 기반으로 간편하게 개별 데이터를 검증
- 요즘 가장 많이 활용되는 방법중 하나
- 아래 코드처럼 JavaBean 내에 어노테이션으로 검증방법을 명시함
public class MemberCreationRequest {
@Size(max=64, message="이름의 최대 길이는 64자 입니다.")
private String name;
@Min(0, "나이는 0보다 커야 합니다.")
private int age;
@Email("이메일 형식이 잘못되었습니다.")
private int email;
// the usual getters and setters...
}
위처럼 DTO에 어노테이션으로 명시 후 아래처럼 @Valid 어노테이션을 해당 @RequestBody에 달게 되면, Java Bean Validation을 수행 한후 문제가 없을때에만 메서드 내부로 진입한다.
- 검증 실패시 Exception 발생
@PostMapping(value="/member")
public class MemberCreationResponse createMember{
@valid @RequestBody final MemberCreationRequest memberCreationRequest){
// member creaion logics here...
}
}
public class Person {
private String name;
private int age;
// the usual getters and setters...
}
위처럼 Person이라는 JavaBean 객체가 있을 때 아래는 해당 인스턴스에서만 활용되는 validator이다.
인터페이스에 있는 두개의 메서드는 아래와 같은 역할을 한다.
public class PersonValidator implements Validator{
/*
* This Validator validates only Person instances
*/
public boolean supports(Class clazz){
return Person.class.equals(clazz);
}
public void validate(Object obj, Errors e){
ValidationUtils.rejectIfEmpty(e, "name", "name.empty");
Person p = (Person) obj;
if(p.getAge() < 0){
e.rejectValue("age", "negativevalue");
}else if(p.getAge() > 110){
e.rejectiveValue("age", "too.darn.old");
}
}
}
사용자나 외부 서버의 요청 데이터를 특정 도메인 객체에 저장해서 프로그램 request에 담아주는 것을 뜻함
S(Source)라는 타입을 받아서 T(Target)이라는 타입으로 변환해주는 Interface
파라미터에 json 형식 문자열이 담겨오는 경우 해당 문자열을 곧바로 특정 DTO에 담고 싶을때 사용
Json은 결국 String, String을 받아서 변환을 해주는 툴 -> Converter<String, XAuthUser> 컴포넌트
헤더에 담긴 json 형식 문자열을 XAuthUser에 바로 담고 싶은 경우 Converter를 Bean으로 등록하면 된다.
이와 비슷하게 PAthParameter나 기타 특수한 경우의 데이터를 특정 객체에 담고 싶은 경우
- Converter를 만들어서 Spring에 Bean으로 등록
특정 객체 <-> String간의 변환을 담당
위 Converter랑 다른 점은 응답을 할때도 활용을 하는 Converter
Formatter도 Converter와 마찬가지로 Spring Bean으로 등록하면 자동으로 ConversionService에 등록시켜주기 때문에 필요에 따라 자동으로 동작하게 된다.