데이터 처리를 하다보면 타입을 바꿔야 되는 상황이 자주 생긴다.
예를 들어 문자 '10'을 숫자 10으로 바꿔야 되는 상황이 있을때 스프링부트에서는 어떻게 하는지 정리하였다.
public void helloV1(HttpServletRequest request) {
String data = request.getParameter("data"); //문자 타입 조회
Integer intValue = Integer.valueOf(data); //숫자 타입으로 변경
}
위와 같이 직접 형변환을 해줄수도 있지만 형변환을 편하게 하는 방법들을 알아보자.
public String helloV2(@RequestParam Integer data) {
System.out.println("data = " + data);
return "ok";
}
@RequestParam을 사용하면 문자 10을 숫자 10으로 편리하게 받을 수 있다.
이 외에도 @ModelAttribute, @PathVariable 에서도 적용된다.
@ModelAttribute
UserData data
class UserData {
Integer data;
}
/users/{userId}
@PathVariable("userId") Integer data
하지만 타입을 직접 만들어서 사용하려면 Converter를 사용하면 된다.
public class StringToIntegerConverter implements Converter<String, Integer> {
@Override
public Integer convert(String source) {
log.info("convert source={}", source);
return Integer.valueOf(source);
}
}
String 에서 Integer로 변환하는 Converter 예시이다.
이 외에도 같은 방식으로 원하는 타입으로 변환할 수 있다.
스프링에서 Converter를 사용하려면 WebMvcConfigurer를 상속받아서 등록을 해줘야 한다.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new StringToIntegerConverter());
}
}
추가로 타임리프를 사용한다면 ${{...}} 를 사용해서 자동으로 컨버전 서비스를 사용해서 변환된 결과를 출력해준다. 물론 스프링과 통합 되어서 스프링이 제공하는 컨버전 서비스를 사용하므로, 직접 등록한 컨버터들을 사용할 수 있다.
<ul>
<li>${number}: <span th:text="${number}" ></span></li> # 기존방법
<li>${{number}}: <span th:text="${{number}}" ></span></li> # 컨버전 서비스 적용 방법
<ul>
추가로 Fommater 를 같이 사용할 수 있는 DefaultFormattingConversionService가 있다.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new StringToIntegerConverter());
//추가
registry.addFormatter(new 직접만든 포매터());
}
}
스프링에서는 기본적으로 자주사용되는 여러가지 포맷터가 제공되니 사용할 수 있다.
@Data
static class Form {
@NumberFormat(pattern = "###,###")
private Integer number;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime localDateTime;
}
위와 같이 애노테이션 기반으로 형식을 지정해서 편리하게 사용할 수 있다.
출처 : 인프런 mvc 강의
'개발공부 > Spring' 카테고리의 다른 글
스프링 인터셉터 (Interceptor) (0) | 2023.08.03 |
---|---|
필터(Filter) (0) | 2023.08.02 |
데이터 검증 (Validation) (0) | 2023.07.31 |
타임리프에서 스프링부트 메시지 사용하기 (0) | 2023.07.28 |
타임리프 기본 문법 정리 (form 태그) (0) | 2023.07.28 |