Converter
package org.springframework.core.convert.converter;
public interface Converter<S, T> {
T convert(S source);
}
타입 컨버터를 사용하려면 Converter 인터페이스를 구현한다.
@Slf4j
public class StringToIntegerConverter implements Converter<String, Integer> {
@Override
public Integer convert(String source) {
log.info("convert source={}", source);
return Integer.valueOf(source);
}
}
스트링과 숫자 간의 컨버터를 만들었다.
@Getter
@EqualsAndHashCode
public class IpPort {
private String ip;
private int port;
public IpPort(String ip, int port) {
this.ip = ip;
this.port = port;
}
}
@EqualsAndHashCode
equals & hashcode를 재정의한다.
값이 같으면 같다고 취급한다.
class ConverterTest {
@Test
void stringToIpPort() {
StringToIpPortConverter converter = new StringToIpPortConverter();
String source = "127.0.0.1:8080";
IpPort result = converter.convert(source);
assertThat(result).isEqualTo(new IpPort("127.0.0.1", 8080));
}
@Test
void ipPortToString() {
IpPortToStringConverter converter = new IpPortToStringConverter();
IpPort source = new IpPort("127.0.0.1", 8080);
String result = converter.convert(source);
assertThat(result).isEqualTo("127.0.0.1:8080");
}
}
테스트 코드로 컨버팅 로직을 확인한다. 하지만 이렇게 하나하나 컨버터를 만드는 건 번거롭다.
참고
스프링은 용도에 따라 다양한 타입 컨버터를 제공한다.
Converter
기본 타입 컨버터
ConverterFactory
전체 클래스 계층 구조가 필요할 때 사용한다.
GenericConverter
정교한 구현이 필요할 때 사용한다.
대상 필드의 애너테이션 정보를 사용할 수 있다.
ConditionalGenericConverter
특정 조건이 참인 경우에만 실행한다.
스프링은 문자, 숫자, boolean, enum 등 일반적인 타입에 대한 컨버터를 기본으로 제공한다. 위 컨버터의 구현체를 찾아보자.
Last updated
Was this helpful?