반응형
참고자료
https://develop-writing.tistory.com/103
* Converter Prototype
package org.springframework.core.convert.converter
public interface Converter<S, T> {
T covert(S source);
}
스프링은 확장 가능한 컨버터 인터페이스를 제공
스프링에 추가적인 타입 변환이 필요하면 이 컨버터 인터페이스를 구현해서 등록
package hello.typeconverter.converter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.convert.converter.Converter;
// 문자를 숫자로 변환
@Slf4j
public class StringToIntegerConverter implements Converter<String,Integer> {
@Override
public Integer convert(String source) {
log.info("convert source={}", source);
return Integer.valueOf(source);
}
}
// 숫자를 문자로 변환
@Slf4j
public class IntegerToStringConverter implements Converter<Integer, String> {
@Override
public String convert(Integer source) {
log.info("convert source={}", source);
return String.valueOf(source);
}
}
// Test를 통해 적용
@Test
void stringToInteger(){
StringToIntegerConverter converter = new StringToIntegerConverter();
Integer result = converter.convert("10");
assertThat(result).isEqualTo(10);
}
@Test
void integerToString() {
IntegerToStringConverter converter = new IntegerToStringConverter();
String result = converter.convert(10);
assertThat(result).isEqualTo("10");
}
사용자 정의 타입 컨버터
예제) http://localhost:8080 에서 IpPort 객체로 변환하는 컨버터
package hello.typeconverter.type;
import lombok.EqualsAndHashCode;
import lombok.Getter;
@Getter
@EqualsAndHashCode
public class IpPort {
private String ip;
private int port;
public IpPort(String ip, int port) {
this.ip = ip;
this.port = port;
}
}
package hello.typeconverter.converter;
import hello.typeconverter.type.IpPort;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.convert.converter.Converter;
@Slf4j
public class StringToIpPortConverter implements Converter<String, IpPort> {
@Override
public IpPort convert(String source) {
log.info("convert source={}", source);
String [] split = source.split(":");
String ip = split[0];
int port = Integer.parseInt(split[1]);
return new IpPort(ip, port);
}
}
// 테스트를 통해 검증
@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");
}
반응형
'spring boot' 카테고리의 다른 글
스프링 포맷터(Formatter) (0) | 2023.11.23 |
---|---|
타임리프 정리-2 (0) | 2023.10.27 |
타임리프(Thymeleaf) 정리 (2) | 2023.10.19 |