Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준
- Thymeleaf
- java
- 스프링
- Android
- 김영한
- QueryDSL
- springdatajpa
- AOP
- 알고리즘
- Greedy
- JPQL
- Servlet
- transaction
- SpringBoot
- 인프런
- pointcut
- 그리디
- jpa
- db
- 자바
- 스프링 핵심 기능
- 스프링 핵심 원리
- Spring Boot
- Proxy
- kotlin
- Exception
- JDBC
- spring
- http
Archives
- Today
- Total
개발자되기 프로젝트
[TypeConverter] Type Converter 본문
- 타입 컨버터를 사용하려면 org.springframework.core.convert.converter.Converter 를 구현 ㅋㅋㅋㅋ
- Converter라는 인터페이스가 너무 많음.. 조심 ㅎㅎ
1. String -> Integer
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);
}
}
2. Integer -> String
@Slf4j
public class IntegerToStringConverter implements Converter<Integer, String> {
@Override
public String convert(Integer source) {
log.info("convert source={}", source);
return String.valueOf(source);
}
}
3. 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");
}
4. String -> IpPort
@Getter
@EqualsAndHashCode //field값이 모두 같으면 같은애로 처리.
public class IpPort {
private String ip;
private int port;
public IpPort(String ip, int port) {
this.ip = ip;
this.port = port;
}
}
@Slf4j
public class StringToIpPortConverter implements Converter<String, IpPort> {
@Override
public IpPort convert(String source) {
log.info("converter source = {}", source);
//"127.0.0.1:8080"
String[] split = source.split(":");
String ip = split[0];
int port = Integer.parseInt(split[1]);
return new IpPort(ip, port);
}
}
5. IpPort -> String
@Slf4j
public class IpPortToStringConverter implements Converter<IpPort, String> {
@Override
public String convert(IpPort source) {
log.info("convert source={}", source);
//IpPort객체 -> "127.0.0.1:8080"
return source.getIp() + ":" + source.getPort();
}
}
6. Test
@Test
void stringToIpPort(){
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");
}
@Test
void IpPortToString(){
StringToIpPortConverter converter = new StringToIpPortConverter();
String source = "127.0.0.1:8080";
IpPort result = converter.convert(source);
assertThat(result.getIp()).isEqualTo("127.0.0.1");
assertThat(result.getPort()).isEqualTo(8080);
assertThat(result).isEqualTo(new IpPort("127.0.0.1", 8080));
}
- 어? assertThat(result).isEqualTo(new IpPort("127.0.0.1", 8080)); 이게 가능한가??
- @EqualsAndHashCode는 field의 값이 같으면 참조값이 달라도 같다고 본다.
그런데 이렇게 흠.. 일일히 사용하면 별론데? 직접 하는거랑 차이가 없다.
TypeConverter를 등록하고 편리하게 사용하고 싶다...
7. 정리
- 스프링은 용도에 따라 다양한 방식의 타입 컨버터를 제공한다.
- Converter 기본 타입 컨버터
- ConverterFactory 전체 클래스 계층 구조가 필요할 때
- GenericConverter 정교한 구현, 대상 필드의 애노테이션 정보 사용 가능
- ConditionalGenericConverter 특정 조건이 참인 경우에만 실행
- https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#coreconvert
- 스프링은 문자, 숫자, 불린, Enum등 일반적인 타입에 대한 대부분의 컨버터를 기본으로 제공한다.
- IDE에서 onverter , ConverterFactory , GenericConverter 의 구현체 보면 여러 converter 볼 수 있음.
8. GitHub : TypeConverter
'인프런 > [인프런] 스프링 MVC 2' 카테고리의 다른 글
[TypeConverter] Spring에Converter 적용 (0) | 2021.10.01 |
---|---|
[TypeConverter] conversionService (0) | 2021.10.01 |
[TypeConverter] Spring Type Converter (0) | 2021.10.01 |
[API예외] @ControllerAdvice (0) | 2021.10.01 |
[API예외] @ExceptionHandler (0) | 2021.10.01 |
Comments