스프링/4. 스프링 MVC-2

76. 스프링 타입컨버터

sdafdq 2023. 9. 22. 22:12

스프링은 컨버터 인터페이스를 제공해 준다.

되게 간단하다.

 

public class StringToIntegerConverter implements Converter<String, Integer> {
    @Override
    public Integer convert(String source) {
        return Integer.valueOf(source);
    }
}

Converter<source타입, 바꿀타입>

이렇게 해서, convert라는 메소드를 @override 하면 된다.

 

그 안에 작업해서 return 해 버리면 된다. 예를들어, String 타입으로 들어온 것을 우리가 만든 IpPort 객체로 Convert 한다고 하면,

 

@Getter
@EqualsAndHashCode
public class IpPort {
    private String ip;
    private int port;

    public IpPort(String ip, int port) {
        this.ip = ip;
        this.port = port;
    }
}

 

 

public class StringIpPortConverter implements Converter<String, IpPort> {
    @Override
    public IpPort convert(String source) {
        StringToIntegerConverter converter = new StringToIntegerConverter();
        String[] split = source.split(":");
        String ip = split[0];
        Integer portInt = converter.convert(split[1]);

        IpPort ipPort = new IpPort(ip, portInt);
        return ipPort;
    }
}

그냥 이렇게 하면 된다.

참고로, 저기 들어오는 값은 "127.0.0.0:8080" 이런 식이라고 가정 했을 때다. 테스트 했을 때 잘 된다.

 

 

 

그리고, 진짜 컨버터는 엄청 많다. Spring에서 제공하는 컨버터 자체만 해도 2개가 나온다.

그 중

import org.springframework.core.convert.converter.Converter;

이걸 써야 한다.

 

 

 

참고로,

@Getter
@EqualsAndHashCode
public class IpPort {
    private String ip;
    private int port;

    public IpPort(String ip, int port) {
        this.ip = ip;
        this.port = port;
    }
}

저기 애노테이션으로 @EqualsAndHashCode 해놓으면, 생기는 기능들이 있는데, 그 중 하나는,

만약 IpPort("127.0.0.0", 8080)과 IpPort("127.0.0.0",8080) 이렇게 다른 객체를 비교했을 때, 멤버들의 값이 서로 같으면 true가 나오게끔 해주는 기능이다. equals 로 비교 했을 때.

 

일단 테스트의 Assertions.assertThat.isEqualTo()를 사용하기 용이하게 하기 위해 썼는데,

더 광범위할 듯? equals 관련해서 더 광범위할듯?

애매하면 쓰지 말고..

 

 

 

참고로 HttpMessageConverter는 이런 컨버터와 관계가 없다.

A -> B 이런 게 필요한 형태는 아주 다양하다.

HttpMessageConverter는 객체 <-> Json 이다.

 

이런 거는 Jackson 데이터 포맷터 이런 식으로 알아봐야 한다. 얘도 따로 제공해주는 포맷팅 방법이 있을거다.

'스프링 > 4. 스프링 MVC-2' 카테고리의 다른 글

78. 컨버전서비스 실제 사용  (0) 2023.09.23
77. 컨버전 서비스  (0) 2023.09.23
75. 스프링의 자동 타입 변환  (0) 2023.09.22
74. ControllerAdviece  (0) 2023.09.17
73. @ExceptionHandler API 예외  (0) 2023.09.16