사용자로부터 입력받은 데이터를 우리가 의도한 대로 사용하기 위해서는 적절한 변환이 필요하다. 특히 웹개발에서는 요청된 데이터를 메인모델에 맞게 변환하는 과정이 필수적이다. Spring에서는 WebDataBinder를 통해 사용자로부터 입력받은 데이터를 변환하고 검증할 수 있다.
PropertyEditor을 이용한 변환 메서드
- PropertyEditor를 이용하여 데이터를 변환할 수 있다. 이는 양방향 타입 변환을 제공한다.
- 보통 컨트롤러내에 변환 메서드를 만들어 데이터를 변환시킨다.
@InitBinder
public void toDate(WebDataBinder binder) {
SimpleDateFromat df = new SimpleDateFormat( [패턴] ); // 예: "yyyy-mm-dd"
binder.registerCustomEditor(Date.class, new CustomDateEditor(df, false));
}
@InitBinder
public void toDate(WebDataBinder binder) {
binder.registerCustomEditor(String[].class, [ 적용할 필드 ], new StringArrayPropertyEditor("-"));
// 문자열을 String배열로 변환한다. "-"는 구분자이다.
}
Converter
- Converter을 이용하여 데이터를 변환할 수 있다. 이는 단방향 타입 변환을 한다. 그렇기에 2개의 Converter을 이용하여 양방향 타입 변환을 구현할 수 있다.
- PropertyEditor가 가진 인스턴스 변수를 생성해야한다는 단점을 개선시켜 싱글톤 패턴을 구현시킬 수 있다.
public class StringToStringArrayConverter implements Converter<String, String[]> {
// String을 String[]로 변환시키는 Converter
@Override
public String[] Convert(String source) {
return source.split("-");
}
- ConversionService에 Converter을 등록시키면 만든 Converter을 사용할 수 있다.
- Spring에서는 WebDataBinder에 DefaultFormattingConversionService를 통해 여러 타입 변환을 제공하고 있다.
Formatter
- 바인딩할 객체에 직접 변환 Formatter 어노테이션을 부여할 수 있다.
- 이는 양방향 타입변환을 제공한다.
@DateTimeFormat(pattern= [패턴] ) // ex) "yyyy-mm-dd"
private Date Birth;
// 입력받은 생일에 관한 문자열이 패턴과 맞으면 Date타입으로 변환한다.
// 이 방식은 변환메서드와 비교하였을 때, 모든 컨트롤러에 동일하게 적용되므로 중복된 변환일 경우 코드의 양을 줄여준다.
'웹개발' 카테고리의 다른 글
컨트롤러 (0) | 2023.06.18 |
---|---|
스프링부트 프로젝트의 구조 (0) | 2023.06.18 |
자바 스프링 예외처리 (0) | 2023.05.26 |
JSP 자세히 알아보기 (0) | 2023.05.25 |
세션(Session) (0) | 2023.05.24 |