컨버터를 사용하든, 포맷터를 사용하든 등록 방법은 다르지만, 사용할 때는 컨버전 서비스를 통해서 일관성 있게 사용할 수 있다.
주위!
메세지 컨버터(HttpMessageConverter)에는 컨버전 서비스가 적용되지 않는다.
특히 객체를 JSON으로 변환할 때 메시지 컨버터를 사용하면서 이 부분을 많이 오해하는데, HttpMessageConveter의 역할은 Http메세지 바디의 내용을 객체를 변환하거나 객체를 HTTP메세지 바디에 입력하는 것이다.
메세지 컨버터에서 컨버팅할때 제공하는 포멧팅 방식을 써야한다.
예) JSON -> Jackson과 같은 라이브러리를 사용해야한다.
컨버전 서비스는 @RequestParam @ModelAttribute @PathVariable, 뷰 템플릿 등에서 사용할 수 있다.
스프링 타입 컨버터
타입을 코드를 통해 바꿔줘야한다 -> 고생을 많이했다
스프링 MVC
@RequestParam
을 사용해서 컨버터를 해준다 이를 사용하기 위해서는 중간에 스프링 컨버터서비스를 썼기때문에 사용 가능
컨버터 인터페이스
타입컨버터는 스프링을 다른 타입으로 바꾸던 다 바꿀 수 있다.
-> 굉장히 범용적인 인터페이스이다.
컨버전 서비스
Conveter
ConvbeterFactory
GenericConverter
ConditionalGenericConverter
여러가지 컨버터를 묶어서 관리 사용할때 간단히 호출해서 사용하면 된다.
컨버터 서비스와 컨버터 레지스트리 두가지 서비스로 제공한다.
스프링에서 컨버터를 등록해주기 위해서는 WebMvcConfigurer를 addConvter를 쭉 등록해주면 된다.
(아래 코드 있음)
포맷터 - Formatter
Converter는 입력과 출력 타입에 제한이 없는, 범용 타입 변환 기능을 제공한다.
이번에는 일반적인 웹 애플리케이션 환경을 생각해보면 불린 타입을 숫자로 바꾼는 것 같은 범용 기능 보다는 개발자는 문자를 다른 타입으로 변환하거나, 다른 타입을 문자로 변환 하는 상황이 대부분이다.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
//주석처리 우선순위
//registry.addConverter(new StringToIpPortConverter());
//registry.addConverter(new IntegerToStringConverter());
registry.addConverter(new StringToIpPortConverter());
registry.addConverter(new IpPortToStringConverter());
//추가
registry.addFormatter(new MyNumberFormatter());
}
}
위에 보면은 주석처리를 해줬는데 그 이유는 컨버터가 먼저 우선순위를 먹기 때문이다.
뷰템플릿에도 등록이 가능한데 괄호 2개르 하더나 폼에서 필드를 적용하면 자동으로 등록이 된다.
Converter VS Formatter
Converter는 범용(객체 -> 객체)
Formatter는 문자에 특화 (객체 -> 문자, 문자 -> 객체) + 현지화(Locale)
-> Converter의 특별한 버전
@Data
static class Form {
@NumberFormat(pattern = "###,###")
private Integer number;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime localDateTime;
}
이런식으로 포멧을 정해서 사용할 수 있다.
'- 코딩 공부 > Spring' 카테고리의 다른 글
섹션2. 커넥션 풀 (0) | 2022.10.03 |
---|---|
[스프링 MVC 2편 - 백엔드 웹 개발 활용 기술] 섹션11. 파일업로드 (1) | 2022.09.19 |
예외처리와 오류 페이지 (0) | 2022.09.04 |
[스프링 MVC 2편 - 백엔드 웹 개발 활용 기술] 섹션9. API 예외 처리 (0) | 2022.08.25 |
[스프링 MVC 2편 - 백엔드 웹 개발 활용 기술] 섹션 6. 로그인 처리1 - 쿠키, 세션 (0) | 2022.08.15 |