spring boot

스프링 타입 컨버터 - Converter

moongi 2023. 11. 23. 18:31
반응형

참고자료

https://develop-writing.tistory.com/103

 

스프링 타입 컨버터 - Converter

스프링 타입 컨버터란? 스프링을 사용해 애플리케이션을 개발할 때 문자를 숫자로 변환하거나, 반대로 숫자를 문자로 변환해야 하는 것처럼 타입을 변환할 때 사용하는 도구입니다. 스프링 MVC

develop-writing.tistory.com

* 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